汇编 assume cs:code, ds:data,ss:stack的理解 请大家进来看看,问题我描述的比较清楚了,不会占用您太多时间
先把程序贴上来:
assume cs:code, ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
谈谈我的理解,以及我碰到的问题:
理解: assume cs:code, ds:data,ss:stack
这句的含义应该是指定让 cs寄存器保持code段的段地址, ds寄存器保存data段的段地址,ss保存stack段的段地址,这个我理解错误了吗,请高手一定帮忙分析下
1、编译,连接 使用 debug调试,使用r命令查看寄存器结果如下:
DS = 14AB SS = 14BB CS = 14BD, 这个结果我感觉很意外, 我觉得这三个值应该是连续的才对, 请高手解答下。
2 、使用d ds:0查看内存结果如下:
-d ds:0
14AB:0000 CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 76 0E 8A 03
这个结果我感到很不理解, 如果说ds保存的是data段的段地址,那么 d ds:0查看到得数据应该是在程序中定义的数据:
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h。 可是显然我查询得到的数据和定义的数据没半毛钱关系,ds不是应该存放的是data段的段地址码?查出来的应该是data段的数据才对啊
这个也请高手帮忙分析下
3、使用d ss:0 查看堆栈段数据结果如下:
14BB:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09
14BB:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
请看这两行数据, 我想哭了, 为什么14BB:0000 开始的16个字节存放的是程序定义的数据:
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
而 14BB:0010开始的16个字节才是堆栈数据:
0,0,0,0,0,0,0,0
我的理解是使用d ss:0 查看到得14bb:0000开始的16个字节应该是:00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
结果为什么是我们data段的数据呢? 请高手指点迷津
愿意帮忙分析的朋友情积极跟帖,也希望您跟帖时分析问题时分析清楚明白一点,我是个汇编新手,csdn好像没汇编板块,我在c/c++板块发表了