汇编语言(王爽)实验五 编写,调试具有多个段的程序

实验内容

  1. 将下面的程序编译、连接,用debug加载、跟踪,然后回答问题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (1)Data段的数据没变
    (2)cs=04B0h、ss=04AFh、ds=04AEh
    (3)设code段的段地址为x,则data段的段地址为x-2,stack段的段地址为x-1因为一个段的大小为64kb。
  2. 将下面的程序编译、连接,用debug加载、跟踪,然后回答问题
    在这里插入图片描述
    在这里插入图片描述 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (1)Data段的数据没变
    (2)cs=04B0h、ss=04AFh、ds=04AEh
    (3)设code段的段地址为x,则data段的段地址为x-1,stack段的段地址为x-2因为一个段的大小为64kb。
    (4)如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为:
    因为每个段都是以16字节来对齐的,但是最大不能超过64KB 。这也就是说,如果你的段数据在16字节内,一样会被当做一个字节段来算,就是16字节。 要是大于16字节呢,那么如果多出就算是1个字节,因为已经超过一个16字节,多出来的1个字节 也得有一个字节段的容量来存储它,所以这时得占两个字节段,就是32字节,以此类推!
    (n/16 + 1 )*16 详细解释下:n/16 : / 这个符号是取整,就是看有几个段。小于或等于16的 除以16后,小于16取整后等于
    0,等于16取整后无余数还是等于0,都是等于 0,(0+1)*16 = 16字节,一个段的大小。大于16,除以后取整有余数,取整部分为多少个字节
    段,剩余的部分再需要一个16字节段来存储它。所以最终得到此公式:(n/16+1)*16
  3. 将下面的程序编译、连接,用debug加载、跟踪,然后回答问题
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    (1)Data段的数据没变
    (2)cs=04AEh、ss=04B2h、ds=04B1h
    (3)设code段的段地址为x,则data段的段地址为x+3,stack段的段地址为x+4
  4. 如果将1、2、3题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因
    解:第3个程序仍然可以正确执行,因为当exe文件被加载进内存中,首先将cs:ip指向程序的首地址,而第3个程序的程序中一开始定义的是代码段,所以cs:ip也就自然的指向了指令的首地址。第1和第2个程序的程序中一开始定义的是数据段,所以cs:ip自然指向了数据的首地址而非指令,数据段反汇编出来的是一堆杂乱的指令,所以不可执行。
  5. 程序如下,编写code段的代码,将a段和b段中的数据依次相加,将结果存到c段中。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  6. 程序如下,编写code段的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值