关于各种s的问题

小D2013 2008-09-08 12:11:45
以下是部分程序代码
assume cs:code,ds:data,ss:stack

data segment
dw 0123H,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends

stack segment
dw 0,2,0,0,0,0,0,0
stack ends

code segment

start: mov ax,stack

;mov ds:[0],2
mov ss,ax
mov sp,16

以下是debug 后使用各种命令查看的结果

-r
AX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B44 ES=0B44 SS=0B54 CS=0B56 IP=0000 NV UP EI PL NZ NA PO NC
0B56:0000 B8550B MOV AX,0B55
-d ds:0 1f
0B44:0000 CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 5C 05 8A 03 . ........O.\...
0B44:0010 5C 05 17 03 5C 05 4B 05-01 01 01 00 02 FF FF FF \...\.K.........
-d 0b54:0 1f
0B54:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09 #.V.............
0B54:0010 00 00 02 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-u cs:0 f
0B56:0000 B8550B MOV AX,0B55
0B56:0003 8ED0 MOV SS,AX
0B56:0005 BC1000 MOV SP,0010
0B56:0008 B8540B MOV AX,0B54
0B56:000B 8ED8 MOV DS,AX
0B56:000D FF360000 PUSH [0000]
-

我初学汇编,有些概念错误,以下是我的观点,请高人指点
1、 ds:0 (0B44:0) 开始处应该是存放的数据,为什么它是从0B54:0出开始
2、 (ds)+10h=0B54 从这里 0B54:0 处应该是程序指令代码,即现在0B56:0处的指令
3、0B56:0之前到0B54:1f 这里面是什么?
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnf 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 donglizhong 的回复:]
我是楼主,上面的解释明白了,再问一下,解决后马上揭贴

我认为一个代码段如果是空代码段那么他占用空间为0B,如果其中有代码那么它占用空间最小是16B,而且任何一个非空代码段所占的空间只能是16B的整数倍。

请问我的理解是否正确
[/Quote]
我不是楼主。
我记着只能以16为单位。每个内存分配块都是整齐的16字节,它屁股后面应该紧跟着内容了。
cnzdgs 2008-09-08
  • 打赏
  • 举报
回复
1、程序被加载时,ds、es都指向PSP,PSP位于程序之前,大小是100H。程序开始执行时,应自己设置ds的值,通常用mov ax, data、mov ds, ax这样的指令。
2、PSP段地址是0B44H,data段地址为PSP段地址+100H/10H=0B54H,data段占10H字节,所以stack段地址为0B54H+10H/10H=0B55H,stack段各占10H字节,所以code段地址为0B55H+10H/10H=0B56H。
3、data段和stack段。
cnzdgs 2008-09-08
  • 打赏
  • 举报
回复
可以在定义段的时候指定对齐方式,缺省情况下是按节(16字节)对齐的,看一下书中关于段定义的说明,再自己做程序试一下。
小D2013 2008-09-08
  • 打赏
  • 举报
回复
我是楼主,上面的解释明白了,再问一下,解决后马上揭贴

我认为一个代码段如果是空代码段那么他占用空间为0B,如果其中有代码那么它占用空间最小是16B,而且任何一个非空代码段所占的空间只能是16B的整数倍。

请问我的理解是否正确
小D2013 2008-09-08
  • 打赏
  • 举报
回复
我是楼主,上面的解释明白了,再问一下,解决后马上揭贴

我认为一个代码段如果是空代码段那么他占用空间为0B,如果其中有代码那么它占用空间最小是2B,而且任何一个非空代码段所占的空间只能是2B的整数倍。

请问我的理解是否正确

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧