2017-09-23 82 views
1

自從我停止使用某些代碼語言以來,已經有一段時間了,並且自從前幾天在學校開始我進行彙編,我想開始理解某些代碼行的背後的一些邏輯。
其實,我試過的是兩個變量之間簡單的ADD操作。我使用emu8086來模擬我的代碼,然後我會告訴你爲什麼我無法理解它。在程序集中加入操作

的代碼如下:

stack segment 
    dw 128 dup(0) 
ends 

data segment 

    x DB 3 
    y DB 5 
    r DB 0 

ends 

code segment 

    mov ah,x 
    mov al,y 
    add ah,al 
    mov r,ah 

ends 

現在,我只是初始化三個變量,其中兩個8位,我想第一個添加到第二。

問題是:當我模擬代碼,我去看看會發生什麼一步一步,第一步應該是AH=03,但它似乎輸出CDH(這不是我的X VAR),我無法得到原因。 AL同樣的事情。

我的意思是,爲什麼我會在我的AHAL寄存器中寫入其他東西而不是x和y var?

+7

您可能忘了設置'DS'來指向您的數據段。 – Jester

+0

對不起,但是,我該怎麼做? –

回答

4

所有的mov指令都可以解決由DS段寄存器引用的內存中的變量。你需要預先設置它!只需添加以下幾行:

code segment 
    mov ax, @data <- Add this 
    mov ds, ax  <- Add this 
    mov ah, x 
    mov al, y 
    add ah, al 
    mov r, ah 
ends 
+0

是的,現在它工作。非常感謝! –