8086汇编地址内容的变化?

assume cs:codesg,ss:stacksgstacksg segment dw 5 dup(1,2,3)stacksg endscodesg segmentstart: mov ax,stacksg mov ss,ax mov sp,32 mov ax,4c00h int 21hcodesg endsend start当sp寄存器赋值后为啥改变了我存入的数据,原本是01 00 02 00 03 00重复五次加00 00 后面变成了6A 07 00 0b 00 6c a3 01

当SP寄存器赋值后,地址内容的变化是由汇编指令操作内存的时候产生的。SP寄存器的设置会影响地址中的内容,最终导致内存中原有数据被改变。该汇编指令mov ax,stacksg; mov ss,ax; mov sp,32将存储区指针从初始段首地址加上32后,将其目标地址存入ES寄存器中,并将其内容存入存储区中。因此造成了存储区中数据的变化。追问

不好意思,麻烦了
我的理解是将系统分配的32字节的sgstack当作栈使用,但我实际是将(ss):0000到(ss):(ip)的33字节当作栈使用,
就是sp指针移动会影响原本地址的内容吗

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-02-09
这段代码是汇编语言,在初始化栈段时,使用了一个操作符 "dw",其实现了将五个二字节数值(01,02,03)依次写入栈中,因为Intel CPU是以小端存储方式,所以最后的栈内容应该是:03 00,02 00,01 00,重复五次。
但在之后的代码中,用 "mov sp,32" 将栈指针赋值为32,这样就改变了栈顶的数值,并不是你期望的01 00 02 00 03 00,因此得到了不同的结果。
相似回答