Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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 写入PUSH命令时,堆栈和sp会发生什么变化?(大会)_Assembly - Fatal编程技术网

Assembly 写入PUSH命令时,堆栈和sp会发生什么变化?(大会)

Assembly 写入PUSH命令时,堆栈和sp会发生什么变化?(大会),assembly,Assembly,我刚开始学习汇编,我和我的朋友对以下命令的具体操作有不同的想法: 按1234h 我们的问题是:堆栈中的第一个数字(12)将放在哪里? ss:[sp-2]? ss:[sp-4] *sp=堆栈指针信不信由你,但你们两人都可能是对的。字节顺序取决于您的计算机的大小 信不信由你,但你们俩都可能是对的。字节顺序取决于您的计算机的大小 假设您谈论的是x86硬件(因为您指定了ss寄存器),字节将按最高顺序(最高有效)到最低顺序(最低有效)。在这种情况下,它将按字节12h,然后按字节34h。由于推送项时x86堆

我刚开始学习汇编,我和我的朋友对以下命令的具体操作有不同的想法:

按1234h

我们的问题是:堆栈中的第一个数字(12)将放在哪里?
ss:[sp-2]?
ss:[sp-4]


*sp=堆栈指针

信不信由你,但你们两人都可能是对的。字节顺序取决于您的计算机的大小

信不信由你,但你们俩都可能是对的。字节顺序取决于您的计算机的大小

假设您谈论的是x86硬件(因为您指定了
ss
寄存器),字节将按最高顺序(最高有效)到最低顺序(最低有效)。在这种情况下,它将按字节
12h
,然后按字节
34h
。由于推送项时x86堆栈指针会减小,因此内存布局如下所示:

[sp+1] = 12h
[sp]   = 34h
如果您以字(两个字节)的形式访问[sp],您将获得原始值:

[sp] = 1234h

假设您谈论的是x86硬件(因为您指定了
ss
寄存器),那么字节将从最高顺序(最高有效)推送到最低顺序(最低有效)。在这种情况下,它将按字节
12h
,然后按字节
34h
。由于推送项时x86堆栈指针会减小,因此内存布局如下所示:

[sp+1] = 12h
[sp]   = 34h
如果您以字(两个字节)的形式访问[sp],您将获得原始值:

[sp] = 1234h
在实模式下(看起来您正试图为其制作程序),首先计算地址。公式非常简单:

address = (segment<<4)+offset
address=(实数模式下的段(看起来您正试图为其编制程序),首先计算地址。公式非常简单:

address = (segment<<4)+offset

address=(segments)那是x86,对吗?顺便说一下,你可以自己写
push 1234h/mov al,[sp]
,然后检查
al
的值,然后再检查
mov al,[sp-1]
。这就是x86,对吗?顺便说一下,你可以自己写
push 1234h/mov al,[sp]来解决这个问题
,然后检查
al
,然后再次检查
mov al[sp-1]
。+1.为了直接回答OP的问题,12h值将存储在[original_sp-1]这整个问题给了我一个似曾相识+1的例子。为了直接回答OP的问题,12h值将存储在[original_sp-1]整个问题给了我一个似曾相识的例子