JavascriptProva

giovedì 24 maggio 2012

La direttiva ASSUME e le parti alte degli indirizzi nelle istruzioni di indirizzamento diretto e indiretto con registro.

Riepiloghiamo...

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