Con il vecchio MASM le idee si fanno più chiare...
Se c'è ASSUME CS:text:
- l'indirizzamento diretto, con i nomi delle variabili, prende come parte alta dell'indirizzo il registro CS.
- l'indirizzamento indiretto con registro prende come parte alta dell'indirizzo il registro DS.
text SEGMENT ASSUME CS:text inizio: JMP Procedura Var DW 0FAFAH Procedura PROC MOV AH,00H MOV AL,03H INT 10H MOV BX,Var MOV AX,[BX] MOV AH,00H INT 16H MOV AH,4CH INT 21H Procedura ENDP text ENDS END inizio
-u 17C2:0000 EB03 JMP 0005 17C2:0002 90 NOP 17C2:0003 FA CLI 17C2:0004 FA CLI 17C2:0005 B400 MOV AH,00 17C2:0007 B003 MOV AL,03 17C2:0009 CD10 INT 10 17C2:000B 2E CS: 17C2:000C 8B1E0300 MOV BX,[0003] 17C2:0010 8B07 MOV AX,[BX] 17C2:0012 B400 MOV AH,00 17C2:0014 CD16 INT 16 17C2:0016 B44C MOV AH,4C 17C2:0018 CD21 INT 21
AX=0003 BX=0000 CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=000B NV UP EI PL NZ NA PO NC 17C2:000B 2E CS: 17C2:000C 8B1E0300 MOV BX,[0003] CS:0003=FAFA -p AX=0003 BX=FAFA CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=0010 NV UP EI PL NZ NA PO NC 17C2:0010 8B07 MOV AX,[BX] DS:FAFA=0000 -p AX=0000 BX=FAFA CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=0012 NV UP EI PL NZ NA PO NC 17C2:0012 B400 MOV AH,00 -
Se c'è ASSUME CS:text, DS:text:
- l'indirizzamento diretto, con i nomi delle variabili, prende come parte alta dell'indirizzo il registro DS;
- l'indirizzamento indiretto con registro prende come parte alta dell'indirizzo il registro DS.
text SEGMENT ASSUME CS:text, DS:text inizio: JMP Procedura Var DW 0FAFAH Procedura PROC MOV AH,00H MOV AL,03H INT 10H MOV BX,Var MOV AX,[BX] MOV AH,00H INT 16H MOV AH,4CH INT 21H Procedura ENDP text ENDS END inizio
-u 17C2:0000 EB03 JMP 0005 17C2:0002 90 NOP 17C2:0003 FA CLI 17C2:0004 FA CLI 17C2:0005 B400 MOV AH,00 17C2:0007 B003 MOV AL,03 17C2:0009 CD10 INT 10 17C2:000B 8B1E0300 MOV BX,[0003] 17C2:000F 8B07 MOV AX,[BX] 17C2:0011 B400 MOV AH,00 17C2:0013 CD16 INT 16 17C2:0015 B44C MOV AH,4C 17C2:0017 CD21 INT 21
AX=0003 BX=0000 CX=0019 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=000B NV UP EI PL NZ NA PO NC 17C2:000B 8B1E0300 MOV BX,[0003] DS:0003=009F -p AX=0003 BX=009F CX=0019 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=000F NV UP EI PL NZ NA PO NC 17C2:000F 8B07 MOV AX,[BX] DS:009F=7865 -p AX=7865 BX=009F CX=0019 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=0011 NV UP EI PL NZ NA PO NC 17C2:0011 B400 MOV AH,00 -
E se uso altri registri?
Proviamo a usare ES al posto di DS:
text SEGMENT ASSUME CS:text, ES:text inizio: JMP Procedura Var DW 0FAFAH Procedura PROC MOV AH,00H MOV AL,03H INT 10H MOV BX,Var MOV AX,[BX] MOV AH,00H INT 16H MOV AH,4CH INT 21H Procedura ENDP text ENDS END inizio
-u 17C2:0000 EB03 JMP 0005 17C2:0002 90 NOP 17C2:0003 FA CLI 17C2:0004 FA CLI 17C2:0005 B400 MOV AH,00 17C2:0007 B003 MOV AL,03 17C2:0009 CD10 INT 10 17C2:000B 26 ES: 17C2:000C 8B1E0300 MOV BX,[0003] 17C2:0010 8B07 MOV AX,[BX] 17C2:0012 B400 MOV AH,00 17C2:0014 CD16 INT 16 17C2:0016 B44C MOV AH,4C 17C2:0018 CD21 INT 21
AX=0003 BX=0000 CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=000B NV UP EI PL NZ NA PO NC 17C2:000B 26 ES: 17C2:000C 8B1E0300 MOV BX,[0003] ES:0003=009F -p AX=0003 BX=009F CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=0010 NV UP EI PL NZ NA PO NC 17C2:0010 8B07 MOV AX,[BX] DS:009F=7865 -p AX=7865 BX=009F CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17B2 ES=17B2 SS=17C2 CS=17C2 IP=0012 NV UP EI PL NZ NA PO NC 17C2:0012 B400 MOV AH,00 -Sì.
Anche se si usa ASSUME CS:text,ES:text:
- l'indirizzamento diretto, con i nomi delle variabili, prende come parte alta dell'indirizzo il registro ES.
- l'indirizzamento indiretto con registro prende come parte alta dell'indirizzo il registro DS.
Il quadro è piuttosto chiaro...
Nessun commento:
Posta un commento