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