大会8086作业 - 填补空白,误会

Ori*_*ber 1 assembly stack x86-16

首先,我要道歉,英语不是我的母语,我无法想出一个更适合我的情况的头衔.

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

.code
    mov [mybyte],______
    mov SP,0574h
    xor ax,ax
here:
    add AL,[mybyte]
    push AX
    dec BYTE PTR [mybyte]
    jnz here
    pop es
    nop
Run Code Online (Sandbox Code Playgroud)

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

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

我对么?或者我误解了代码?

Jes*_*ter 5

push变化SP,即减少2.pop它补充说,它也改变了它,它恰恰相反2.这是假设16位模式.

由于最终pop增加了一个2回来,你需要循环3次,以获得570h574h.因此正确的价值是3.

push AX ; SP = 572h
...
push AX ; SP = 570h
...
push AX ; SP = 56Eh
...
pop es  ; SP = 570h
Run Code Online (Sandbox Code Playgroud)