JavascriptProva

mercoledì 23 maggio 2012

Pedanterie sull'indirizzamento diretto...

Ecco.
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 inizio
E 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     21
Sì: 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