王爽书的汇编语言里的一个简单问题
本帖最后由 s0512 于 2013-5-26 13:54 编辑assume cs:code,ds:data
data segment
db 'unIX'
db 'foRK'
data ends
code segment
start: mov al,'a'
mov bl,'b'
mov ax,4c00h
int 21h
code ends
end start这段是代码
为什么段地址要从0B3DH开始 而不从0B2DH开始呢?
求解!
0B3DH-0B2DH=10H,刚好16位,留给栈用 0B3DH-0B2DH=10H,这段内存用来存放数据,程序段前缀等的一些信息。另外也是因为cs,ds在内存中的存储是16位,也就是10h 本帖最后由 comethat 于 2013-5-4 16:53 编辑
1971827035 发表于 2013-5-4 16:10 static/image/common/back.gif
0B3DH-0B2DH=10H,这段内存用来存放数据,程序段前缀等的一些信息。另外也是因为cs,ds在内存中的存储是16位 ...
那假如前面多定义一个ss:stack或者把ds:data 改成ds:datasg
结果还是10H吗 真是难得给力的帖子啊。 我只是路过打酱油的。 comethat 发表于 2013-5-4 16:44 static/image/common/back.gif
那假如前面多定义一个ss:stack或者把ds:data 改成ds:datasg
结果还是10H吗
其实你可以自己试试看,按照你的想法改一下看看结果是什么。再比较之前的,你会有所收获的, 传说好像是放psp了吧 因为DOS有一个PPS区,占用256个字节。不知道跟这个有关系吗? 这个书上有说明的 {:1_1:}学习了。 留有256个字节用来进行编译预处理的,0B2d-0b3d地址相差256个字节,因为还要加上偏移地址啊,即0b2d0-0b3d0刚好256字节。
页:
[1]