Mi hanno sempre messo in crisi le cose "imprecise", e allora sento l'esigenza di precisare qualcosa a proposito della notazione assembly dell'indirizzamento diretto.
Dal momento che il disassemblato del debug mostra un numero fra parentesi quadre, provo a fare così per vedere se la notazione, nel sorgente, possa essere scritta usando parentesi quadre per il nome di una variabile.
Uso utti e due i tipi di notazione:
text SEGMENT inizio: JMP Procedura Var DW 0FAFAH Procedura PROC MOV AH,00H MOV AL,03H INT 10H MOV AX,[Var] MOV BX,Var MOV AH,00H INT 16H MOV AH,4CH INT 21H Procedura ENDP text ENDS END inizioE vediamo se nel disassemblato esse figurano allo stesso modo:
-u 1802:0000 EB02 JMP 0004 1802:0002 FA CLI 1802:0003 FA CLI 1802:0004 B400 MOV AH,00 1802:0006 B003 MOV AL,03 1802:0008 CD10 INT 10 1802:000A 2E CS: 1802:000B A10200 MOV AX,[0002] 1802:000E 2E CS: 1802:000F 8B1E0200 MOV BX,[0002] 1802:0013 B400 MOV AH,00 1802:0015 CD16 INT 16 1802:0017 B44C MOV AH,4C 1802:0019 CD21 INT 21Sì: figurano allo stesso modo, e a giudicare dall'esecuzione passo-passo hanno anche, ovviamente, il medesimo effetto:
AX=0003 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17F2 ES=17F2 SS=1802 CS=1802 IP=000A NV UP EI PL NZ NA PO NC 1802:000A 2E CS: 1802:000B A10200 MOV AX,[0002] CS:0002=FAFA -p AX=FAFA BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17F2 ES=17F2 SS=1802 CS=1802 IP=000E NV UP EI PL NZ NA PO NC 1802:000E 2E CS: 1802:000F 8B1E0200 MOV BX,[0002] CS:0002=FAFA -p AX=FAFA BX=FAFA CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=17F2 ES=17F2 SS=1802 CS=1802 IP=0013 NV UP EI PL NZ NA PO NC 1802:0013 B400 MOV AH,00 -Esatto!
Quindi il fatto di scrivere MOV AX,Var può essere considerato una tollerante eccezione alla regola secondo cui viene usato il valore presente all'indirizzo specificato dal valore di una variabile.
Nel caso invece dell'uso del valore presente all'indirizzo specificato dal valore di un registro, la parentesi quadra è d'obbligo!
Nessun commento:
Posta un commento