Assembly 汇编8086语言这段代码是什么意思?

Assembly 汇编8086语言这段代码是什么意思?,assembly,x86-16,8086,Assembly,X86 16,8086,我有这段代码,我想问一下如何阅读它,以了解在程序到达第24行后ax中的值是多少 在循环内部,当 移动轴[sp+4d] 它会改变ax的值吗?至sp+4 我知道在程序的末尾ax是15英寸六角的,我只是想知道为什么? 非常感谢也许你的老师喜欢捉弄你 mov-ax[sp+4d]和mov[sp+4d],ax指令不可编码(*)。它们的语法错误,因为SP寄存器不能用作寻址组件。因此,如果您甚至不能汇编程序,您将如何找到AX寄存器的值 也许老师希望您修复错误,然后报告有关AX的信息 在代码中,您可以通过BP寄存

我有这段代码,我想问一下如何阅读它,以了解在程序到达第24行后ax中的值是多少 在循环内部,当 移动轴[sp+4d] 它会改变ax的值吗?至sp+4 我知道在程序的末尾ax是15英寸六角的,我只是想知道为什么?
非常感谢

也许你的老师喜欢捉弄你

mov-ax[sp+4d]
mov[sp+4d],ax
指令不可编码(*)。它们的语法错误,因为
SP
寄存器不能用作寻址组件。因此,如果您甚至不能汇编程序,您将如何找到
AX
寄存器的值

也许老师希望您修复错误,然后报告有关AX的信息

在代码中,您可以通过
BP
寄存器处理堆栈上的参数。下一步是重写do_something过程,这很好。我还保留了
BP
的值

  AX     BP     RET    ARG            Stack ARG is the argument pushed at line 17
\----/ \----/ \----/ \----/                 RET is the return address
^      ^             ^
|      |             |
| SP   | BP          | BP+4
程序到达第24行后,ax中的值是多少

在第23行,
AX
寄存器仍将保持零,因为do\u something proc保留了
AX
的值
在第24行,
AX
寄存器将变为21,因为在修改后的程序中,
调用
ing do_something proc 21次将其堆栈参数增加21次,从0增加到21



(*)mov ax、[esp+4]和
mov[esp+4]、ax
指令在代码中可以很好地用于80386之类的后续cpu,因为
esp
寄存器可以用作寻址组件。

[sp+4]
不是有效的8086寻址模式。请勿发布代码图片!这是我家庭作业中的一张图片。老师问24行的ax值是多少,希望得到答案
push bp
mov  bp, sp
push ax
mov  ax, [bp+4]
inc  ax
mov  [bp+4], ax
pop  ax
pop  bp
ret