bxczp 发表于 2014-11-16 20:48:05

《汇编语言》实验五(5)的问题

定义两个段
assume cs:codea segmentdb 1,2,3,4,5,6,7,8a endsb segmentdb 1,2,3,4,5,6,7,8b ends
为什么 出现如下内存分配:为什么08 后面是 00 00 00 。。。而不是01 02 03 。。。

b232wang 发表于 2014-11-17 06:37:57

因为每一个段的空间是16(010H)的倍数来定义的
所以不满16个字节就补全 超出比如说17个字节 那就是两个16 = 32字节

段地址*16+ 偏移地址

语文没学好。。不知道解答你的疑惑了么

bxczp 发表于 2014-11-17 17:53:36

那段地址*16+ 偏移地址写上去是什么意思

bxczp 发表于 2014-11-17 17:54:11

b232wang 发表于 2014-11-17 06:37
因为每一个段的空间是16(010H)的倍数来定义的
所以不满16个字节就补全 超出比如说17个字节 那就是两个16 ...


那段地址*16+ 偏移地址写上去是什么意思

bxczp 发表于 2014-11-17 17:57:42

b232wang 发表于 2014-11-17 06:37
因为每一个段的空间是16(010H)的倍数来定义的
所以不满16个字节就补全 超出比如说17个字节 那就是两个16 ...

还有为什么 每一个段的空间是16(010H)的倍数????是因为段地址*16+ 偏移地址 的原因吗??

zhyuchao123 发表于 2014-11-17 21:06:05

你不是分配了两个段a和b嘛,A段分配完后,再分配b时,b地址自动加1了,这个是段地址,段地址要乘以16才是物理地址,所以就有了8后面是0,因为他们是16位的

b232wang 发表于 2014-11-17 23:08:11

说白了 我觉得这是开发软件(编译器)的问题
这样方便我们去调用
它这么设计 我觉得很好啊
这样每一次你可以很轻松的找到首地址 直接ds+1 或者 偏移地址+010h

每一段的空间是16的倍数 我觉得也是为了方便我们去计算和使用

个人见解 :lol:
页: [1]
查看完整版本: 《汇编语言》实验五(5)的问题