//在32位模式的环境中
// data1,sdata1,sdata2 in stack segment
int data1=200;
short sdata1;
short sdata2;
//size;
sizeof(data1)=4bytes;
sizeof(sdata1)=sizeof(sdata2)=2 bytes;
抽象内存分配:
|
data1 | |
|
sdata1 |
sdata2 |
sdata1=data1+1;
伪汇编指令为:R2=M[R1+4] //load
R3=R2+1//add
M[R1+2]=.2R3 // store
in stack,地址由高往低增长,取data1故用R1基址+4取4个bytes的内容即200于register R2
M[R1+2]=.2R3 为取R3中低两个bytes内容于M[R1+2]中,若M[R1+2]=R3,则因为R1+2表示sdata2地址,sdata2占两个bytes,则取出R3中4bytes(在32 位模式中)内容会覆盖sdata2的两个bytes和data1的高地址的两个bytes,那么data1不是200了,远远大于200,至于多少则应换成对应的二进制位算…..位模式
sdata2=data1;也是如此
本文介绍了在32位模式环境中,如何使用伪汇编指令交换两个变量的数据。通过具体的内存分配和寄存器操作,详细解析了避免溢出问题的交换过程,确保数据正确交换而不影响相邻内存区域。
1473

被折叠的 条评论
为什么被折叠?



