1.
- cpu执行程序,程序返回前,data段中的数据是多少23 01 56 04 89 07 BC 0A EF 0D ED 0F BA 0C 87 09
![技术分享图片](http://image.bubuko.com/info/201811/20181130220412756561.jpg)
- cpu执行程序,程序返回前,cs=076c, ss=076b, ds=076a
![技术分享图片](http://image.bubuko.com/info/201811/20181130220413210680.jpg)
- 设程序加载后,code段的地址为X,则data段的地址X-2,stack段为X-1
2.
- cpu执行程序,程序返回前,data段中的数据是多少23 01 56 04
![技术分享图片](http://image.bubuko.com/info/201811/20181130220413600343.jpg)
- cpu执行程序,程序返回前,cs=076C, ss=076B, ds=076A
![技术分享图片](http://image.bubuko.com/info/201811/20181130220413872815.jpg)
- 设程序加载后,code段的地址为X,则data段的地址X-2,stack段为X-1
- 对于如下定义的段:
name segment
...
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为:((N+15)/16)*16。
3.
- cpu执行程序,程序返回前,data段中的数据是23 01 56 04
![技术分享图片](http://image.bubuko.com/info/201811/20181130220414162865.jpg)
- cpu执行程序,程序返回前,cs=076a, ss=076e, ds=076d
![技术分享图片](http://image.bubuko.com/info/201811/20181130220414377717.jpg)
- 设程序加载后,code段的地址为X,则data段的地址X+3,stack段为X+4
4.
- 如果将(1)(2)(3)题中的最后一条伪指令“end start”改为“end”,则哪个程序仍可以正确执行?请说明原因。
- 第三个程序还可以执行。因为不指明程序入口时,cs:codesegment默认ip为0,第三个程序正好是程序开始的地方,前两个一开始时在存储数据,到后来才才有cs:codedegment,但因为不指名程序入口时默认ip为0,则会解析为汇编指令为错误。
5.
代码:
![技术分享图片](http://image.bubuko.com/info/201811/20181130220414724410.jpg)
① 在实现数据相加前,逻辑段 c 的 8 个字节
![技术分享图片](http://image.bubuko.com/info/201811/20181130220414964654.jpg)
② 执行完实现加运算的代码后,逻辑段 c 的 8 个字节
![技术分享图片](http://image.bubuko.com/info/201811/20181130220415325996.jpg)
6.程序如下,编写code中的代码,用push指令将a段中的前8个字形数据,逆序存储到b段中
代码:
![技术分享图片](http://image.bubuko.com/info/201811/20181130220415480298.jpg)
截图
![技术分享图片](http://image.bubuko.com/info/201811/20181130220415640461.jpg)
总结:个人觉得这次的实验前几个很简单,都是套路,但是后两个是有思路不会实施,主要就在于之前的内容没掌握好,还有就是寻址掌握的根本就不好。’
实验五 编写、调试具有多个段的程序
原文:https://www.cnblogs.com/zc-de-blog/p/10041889.html