Assembly 汇编8086语言这段代码是什么意思?
我有这段代码,我想问一下如何阅读它,以了解在程序到达第24行后ax中的值是多少 在循环内部,当 移动轴[sp+4d] 它会改变ax的值吗?至sp+4 我知道在程序的末尾ax是15英寸六角的,我只是想知道为什么?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寄存
非常感谢也许你的老师喜欢捉弄你
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