组装8086作业——填空、误解

Assembly 8086 homework - fill in the blank, misunderstanding

首先我想道歉,英语不是我的母语,我想不出一个更适合我情况的标题。

我得到了这个不完整的汇编代码:

.code
    mov [mybyte],______
    mov SP,0574h
    xor ax,ax
here:
    add AL,[mybyte]
    push AX
    dec BYTE PTR [mybyte]
    jnz here
    pop es
    nop

问题是:_____应该写什么,这样当我们到达"nop"命令时,SP的值就是570。

我理解这个问题,我想我也理解代码,但问题是,我看待它的方式 - SP 永远不会改变。代码中唯一引用 SP 的地方是 mov sp,0574h 行。所以无论我们在____的地方写什么,SP都不会改变。

我说的对吗?还是我误解了代码?

push改变SP,即减2pop 也改变它,它做相反的事情,它添加 2。这是假设 16 位模式。

由于最后的pop后面加了一个2,需要循环3次才能从574h得到570h。因此正确的值为 3.

push AX ; SP = 572h
...
push AX ; SP = 570h
...
push AX ; SP = 56Eh
...
pop es  ; SP = 570h

抱歉。还不能使用评论。回答你的第二个问题: ES 0006 是正确的。 mybyte 从 3 减少到 0 也是对的。目前您唯一的错误是将哪些值推送到堆栈。只需再次检查每个循环周期 AL 发生了什么。

剧透:

想自己了解的请勿阅读:

Mybyte 没有移入 AL,而是添加到其中: 0 + 3 + 2 + 1 = 6