dati SEGMENT Dato1 DW 0BABAH Dato2 DW 0CACAH dati ENDS text SEGMENT assume CS:text,DS:dati inizio: JMP Procedura Var DW 0FAFAH Procedura PROC MOV AH,00H MOV AL,03H INT 10H MOV AX, Var MOV BX,Dato1 MOV AH,00H INT 16H MOV AH,4CH INT 21H Procedura ENDP text ENDS END inizio
-u 141E:0000 EB03 JMP 0005 141E:0002 90 NOP 141E:0003 FA CLI 141E:0004 FA CLI 141E:0005 B400 MOV AH,00 141E:0007 B003 MOV AL,03 141E:0009 CD10 INT 10 141E:000B 2E CS: 141E:000C A10300 MOV AX,[0003] 141E:000F 8B1E0000 MOV BX,[0000] 141E:0013 B400 MOV AH,00 141E:0015 CD16 INT 16 141E:0017 B44C MOV AH,4C 141E:0019 CD21 INT 21
AX=0003 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=140D ES=140D SS=141D CS=141E IP=000B NV UP EI PL NZ NA PO NC 141E:000B 2E CS: 141E:000C A10300 MOV AX,[0003] CS:0003=FAFA -p AX=FAFA BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=140D ES=140D SS=141D CS=141E IP=000F NV UP EI PL NZ NA PO NC 141E:000F 8B1E0000 MOV BX,[0000] DS:0000=20CD -p AX=FAFA BX=20CD CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=140D ES=140D SS=141D CS=141E IP=0013 NV UP EI PL NZ NA PO NC 141E:0013 B400 MOV AH,00 -In pratica ho detto all'assemblatore di assumere come parte alta dell'indirizzo il registro CS per le variabili contenute nel segmento text, e di assumere come parte alta dell'indirizzo il registro DS per le variabili contenute nel segmento dati.
. Posso anche associare il segmento dati con ES, volendo:
dati SEGMENT Dato1 DW 0BABAH Dato2 DW 0CACAH dati ENDS text SEGMENT assume CS:text,ES:dati inizio: JMP Procedura Var DW 0FAFAH Procedura PROC MOV AH,00H MOV AL,03H INT 10H MOV AX, Var MOV BX,Dato1 MOV AH,00H INT 16H MOV AH,4CH INT 21H Procedura ENDP text ENDS END inizio
-u 141E:0000 EB03 JMP 0005 141E:0002 90 NOP 141E:0003 FA CLI 141E:0004 FA CLI 141E:0005 B400 MOV AH,00 141E:0007 B003 MOV AL,03 141E:0009 CD10 INT 10 141E:000B 2E CS: 141E:000C A10300 MOV AX,[0003] 141E:000F 26 ES: 141E:0010 8B1E0000 MOV BX,[0000] 141E:0014 B400 MOV AH,00 141E:0016 CD16 INT 16 141E:0018 B44C MOV AH,4C 141E:001A CD21 INT 21
AX=0003 BX=0000 CX=002C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=140D ES=140D SS=141D CS=141E IP=000B NV UP EI PL NZ NA PO NC 141E:000B 2E CS: 141E:000C A10300 MOV AX,[0003] CS:0003=FAFA -p AX=FAFA BX=0000 CX=002C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=140D ES=140D SS=141D CS=141E IP=000F NV UP EI PL NZ NA PO NC 141E:000F 26 ES: 141E:0010 8B1E0000 MOV BX,[0000] ES:0000=20CD -p AX=FAFA BX=20CD CX=002C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=140D ES=140D SS=141D CS=141E IP=0014 NV UP EI PL NZ NA PO NC 141E:0014 B400 MOV AH,00 -In pratica, tanto per rendermi sicuro di aver capito (ci riuscirò mai, con la mia incertezza cronica?) ecco il significato della direttiva ASSUME:
La direttiva ASSUME dà istruzioni all'assemblatore su quale registro prendere per stabilire la parte "alta" dell'indirizzo specificato nelle variabili per un contenuto della memoria.
Nessun commento:
Posta un commento