2017-09-23 157 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

是的,现在它工作。非常感谢! –