Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 将内存位置推入堆栈_Assembly_Stack_Masm - Fatal编程技术网

Assembly 将内存位置推入堆栈

Assembly 将内存位置推入堆栈,assembly,stack,masm,Assembly,Stack,Masm,关于堆栈的push命令的快速问题 命令PUSH[chr]的工作原理与MOV sum不同,firstparam的工作原理与前面解释的不同 那么为什么推送单词PTR[chr]起作用呢 *chr、sum和firstparam是由我在.DATA中定义的本地分配变量 提前谢谢 chr只是某个内存位置的名称。如果你只说push[chr],汇编程序怎么知道你要推多少字节?通过添加word ptr您清楚地表明您想要推送2字节的数据。我同意,但它仍然将数据从内存本身移动到内存的另一部分,如MOV sum,firs

关于堆栈的
push
命令的快速问题

命令
PUSH[chr]
的工作原理与
MOV sum不同,firstparam
的工作原理与前面解释的不同

那么为什么
推送单词PTR[chr]
起作用呢

*chr、sum和firstparam是由我在.DATA中定义的本地分配变量


提前谢谢

chr
只是某个内存位置的名称。如果你只说
push[chr]
,汇编程序怎么知道你要推多少字节?通过添加
word ptr
您清楚地表明您想要推送2字节的数据。我同意,但它仍然将数据从内存本身移动到内存的另一部分,如
MOV sum,firstparam
,不是吗?错误也一样(A2070)。
push[chr]
不明确
mov sum,firstparam
是不正确的,因为没有这种形式的
mov
。这并不意味着有一些硬性规则规定指令不能同时读取和写入内存-只是这样的指令并不多,存在的指令通常有一个隐式的源和/或目标(例如,
push
pop
movs
)。是的,所有指令要么具有隐式内存操作数(如
[rsp+=8]
用于
pop
),要么使用mod/rm+可选SIB字节中编码的有效地址。有一个主要的例外:
mov-rax,m64
是从64位绝对地址加载的唯一方法,而不是32位符号扩展,并且它不使用mod/rm。请参阅“英特尔insn参考手册”(中的链接)。许多单操作数指令使用mod/rm字节的
/r
字段作为额外的操作码位,例如区分
not
neg
,因为它们使用相同的操作码字节。另请参阅和