2017-06-09 45 views
-1

鑑於這一數據段:8086數據段MASM

.data 
vara dw 0AB0h 
varb db 'C' 
varc db 'DEF',0 
vard db 65 
vare db '90','$' 
  1. 你怎麼找到的偏移量變量vard的數據段?
  2. 你如何找到多少字節將被寫入到所有這些指令執行後,在標準輸出設備:

    MOV DX,偏移VARC

    MOV啊,9

+0

對於#2:爲什麼不直接運行程序並對它們進行計數?當你有一臺能告訴你的計算機時,無需問我們該程序是做什麼的。 –

+0

我知道答案,但我不知道如何得到答案 – babyDev

+0

閱讀[函數9的文檔](http://stanislavs.org/helppc/int_21-9.html)。 –

回答

0

如何找到變量vard的數據段的偏移量?

只是計數所有preceeds的vard變量的數據。

你有1個單詞,1個字符,3個字符和1個字節。


你如何找到多少字節將被寫入到標準輸出設備的所有這些指令執行後:

再算上所有數據直到但不包括未來$標誌。

您有3個字符,1個字節,1個字節和2個字符。

+0

在來自其他翻譯單元的'vard'變量之前可能有其他變量。直到鏈接時間才能知道答案。 –

0

(1)中的偏移量vard的數據段是:偏移vard。它的值已解決,直到鏈接時間才能知道。

(2)假設你正在執行(雖然我看不出有什麼INT 21H在你的問題):

mov dx, offset varc 
mov ah,9 
int 21h 

你將輸出7個字節。所涉及的所有字段都是字節,因此不會有對齊填充混雜在一起,彙編器/鏈接器不會對變量重新排序,即使它們是獨立的(即未嵌入結構中)。