2016-11-08 495 views
0

您好新來的彙編語言。我試圖讓使用DOSBOX和MASM compilor M}這裏是代碼使用匯編語言查找變量的內存位置

 .model small 
    .stack 100H 
.data 
    VARA BYTE 10 ;address is DS:xxxx 
VARB BYTE 0BH ;address is DS:xxxx+1 
VARC WORD ? 
    VARD SBYTE ? 
    VARE DWORD ? 
    ARR BYTE 20 DUP(?) 
    VARF SWORD 010B 
    ARRB WORD 10 DUP(?) 
    VARZ BYTE 0 
.CODE 
    MAIN PROC 
    mov ax,@data 
mov ds,ax 
mov ax,offset VARA 
mov ah,09 
int 21h 

mov ax,offset VARB 
mov ah,09 
int 21h 


    mov ax,offset VARC 
mov ah,09 
int 21h 

    mov ax,offset VARD 
mov ah,09 
int 21h 


    mov ax,offset VARE 
mov ah,09 
int 21h 


mov ax,offset ARR 
mov ah,09 
int 21h 


    mov ax,offset VARF 
mov ah,09 
int 21h 

    mov ax,offset ARRB 
mov ah,09 
int 21h 

mov ax,offset VARZ 
mov ah,09 
int 21h 


mov ah,4ch 
int 21h 
main endp 
end main 

我怎樣才能找到的內存地址爲所有這些變量變量的存儲位置? U可以看到錯誤的圖像

enter image description here

+0

你可以試試用'/ L'命令行選項來編譯它MASM生成列表文件,在這裏我想地址將是可見的太(以數據段中的偏移量形式,直到二進制文件加載到內存中並且從加載程序動態鏈接到它的目標位置時,絕對真實物理地址纔是已知的。 – Ped7g

+1

關於錯誤:將'VARA BYTE 10'(大小說明符)更改爲'VARA DB 10'(「define byte」指令)等(DWORD用於DWORD和SWORD用於DD用於DWORD) https://msdn.microsoft.com/en-us/library/8f6k0he8.aspx – Ped7g

+0

@ ped7g後糾正這個數據庫有沒有錯誤,但沒有輸出在屏幕上 – abd

回答

1

使用OFFSET改性劑,如:

mov ax, OFFSET VARA 

VARA地址裝入ax寄存器。您也可以使用LEA指令來實現同樣的事情:

lea ax, VARA 
+0

thanx我應該使用這個爲每個變量或只是VarA然後增量得到其他地址? – abd

+0

請讓我知道我能做什麼? – abd

+1

@abd都可以工作。如果你知道變量的相對地址,當然,只需增加其他地址即可。就我個人而言,我只是分別加載每個地址。 – davmac