组装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
,即减2
。 pop
也改变它,它做相反的事情,它添加 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
首先我想道歉,英语不是我的母语,我想不出一个更适合我情况的标题。
我得到了这个不完整的汇编代码:
.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
,即减2
。 pop
也改变它,它做相反的事情,它添加 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