弄了一晚上都没解决的问题
http://bbs.fishc.com/data/attachment/album/201107/10/220209akmhxhkcyidlhmq4.gifassume cs:codesg,ss:stacksg,ds:datasg
datasg segment
db'1. display '
db'2. brows '
db'3. replace '
db'4. medify '
datasg ends
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
codesg segment
start: mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov ax,4c00h
int 21h
codesg ends
end start
如图,DS=144D,SS=145D,为什么数据段的内容存到堆栈段去了也就是存到145D去了
因为现在的DS是指向PSP空间的段地址!
每个程序加载时,先回创建一段256个字节的PSP数据区。
所以程序的段地址应该是(段地址*16+10H), 这个地址正好是SS的段地址。
因为内存里面的代码可以当做数据、栈、或者代码来执行,所以这个是自己定的。
DS和SS同时指向了一个段地址!
请看王爽 汇编语言的第92页 但是我做了对DS的使用喔,不可能一直都指向PSP的头吧,我还是不太明白 milorguan 发表于 2011-7-11 09:34 static/image/common/back.gif
但是我做了对DS的使用喔,不可能一直都指向PSP的头吧,我还是不太明白
你做了对DS的使用没错,但是你DEBUG的时候没等他运行到那一步你就查看了DS的值,不是吗?
你等运行完 mov ds,ax 然后再查看DS的值,肯定没错了!~
不知道 我的编译运行后是好的耶 !机子问题 这个,我也不解,困惑,可能就是电脑问题吧 画出内存的图,然后对照着分析,系统存在一段256个字节的数据区。
那么段地址应该是(ds*16+10H),ds和sscpu是不知道的,是程序员自己定义的 为什么我抽奖都是惩罚啊??郁闷{:5_105:}
页:
[1]