王爽的汇编语言实验 求指点啊

assume cs:code,ds:data,ss:stackcode segmentstart: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 21hcode endsdata segment dw 0123h,0456hdata endsstack segment dw 0,0stack endsend start
为什么数据段变成了1508 栈段成了1509啊 代码段是1505:00-1505:19 1507——1508去哪了啊??

代码段 1505:0000——1507:0001,
(其中最后一句mov ax,4c00占用三个字节,INT 21占用一个字节)。
那么1505全部被用,1506全部被用,1507的前两个字节被用。
正如一楼所说的就算只占用一个字节下一段的段地址也要加1。
所以data段和stack段就是1508和1509了。
而你所说的1505:00-1505:19其实可以换算成1505:00-1506:09
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-26
段地址相差1,物理地址相差1个小节(16个字节)。

代码长度若小于16(10H),它就只占用1个小节,下一段的段地址加1
代码长度若大于16,小于32(20H),占用2个小节,下一段的段地址要加2
代码长度若大于32,小于48(30H),占用3个小节,下一段的段地址要加3

你的程序的代码长度有34(22H)个字节(是1505:0000到1505:0021,程序包括INT 21指令的长度在内。你算成1505:19,是漏算了你程序最后包括POP [0000]在内的三条指令的长度),超过20H,不到30H,因此,下一段的段地址,要加3。
相似回答