首先我要道歉,英语不是我的母语,我无法想出一个更符合我情况的头衔。
我得到了这个不完整的汇编代码:
.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都不会改变。
我说错了吗?或者我误解了代码?
答案 0 :(得分:5)
push
更改SP
,即按2
递减。 pop
也会更改它,它会相反,它会添加2
。这是假设16位模式。
由于最终pop
添加2
,您需要循环3次才能从570h
获得574h
。因此,正确的值为3
。
push AX ; SP = 572h
...
push AX ; SP = 570h
...
push AX ; SP = 56Eh
...
pop es ; SP = 570h
答案 1 :(得分:0)
Sry基因。不能使用评论。回答你的第二个问题: ES 0006是正确的。 mybyte从3减少到0也是对的。目前唯一错误的是将值推到堆栈中。再次检查每个循环周期AL会发生什么。
扰流:
如果您想了解自己,请不要阅读:
Mybyte未移入AL但已添加到其中: 0 + 3 + 2 + 1 = 6