• 实验 5 编写、调试具有多个段的程序


    题目:将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

    实验(1)截图如下:

    自己调试如下:

    结论:

    ①通过观察0770:0000结果可以发现,data段的数据在执行程序后,程序返回前并未改变。

    ②CPU执行程序,程序返回前,cs= 0772h 、ss=  0771h  、ds= 0770 h

    ③code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。

    实验(2)截图如下:

    ①与(1)的结果一样,data段的数据在执行程序后,程序返回前仍未改变,仍是原始数据。

    ②CPU执行程序,程序返回前,cs= 0772h 、ss=  0771h  、ds= 0770 h

    ③设程序加载后,code段的段地址为X,则data段的段地址为  X-2 、stack段的段地址为 X-1

    ④对于如下定义的段:

    name  segment

    .........

    name ends

    如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为  (N/16+1)*16 

    实验(3)调试截图如下:

    ①可以发现,data段的数据在执行程序后,程序返回前并未改变,仍是原始数据。

    ②从图中可以看出,CPU执行程序,程序返回前,cs=0770h、ss= 0774h、ds=0773h。

    ③进一步可以发现,若code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。

    实验(4)如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?说出原因。

    答:(1)(2)改变前后SS发生变化,都是数据先加载进内存,所以不能正确运行。(3)是代码段先被加载进内存,所以能够运行且执行正确。

    实验(5)程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存放到c段中。

    实验(6)程序如下,编写code段中的代码,用push指令将a段中的前8个字符型数据,逆序存储到b段中。

    添加程序:

    mov ax,a
    mov ds,ax
    mov ax,b
    mov ss,ax
    mov sp,16
    mov bx,0
    mov cx,8
    s:push ds:[bx]
      inc bx
      loop s
      mov ax,4c00h
      int 21h

    如图可见正确

  • 相关阅读:
    配置文件中文件重复
    大型网站技术架构02
    2018.12.26-12.30第一周毕设计划
    软件架构模式-分层架构II
    软件架构模式-分层架构
    echarts实现中国地图数据展示
    Python数据分析入门(一)——了解Python下的函数包
    Python学习笔记(二)
    Python学习笔记(一)
    Echarts的简单使用
  • 原文地址:https://www.cnblogs.com/jasonIL/p/10023118.html
Copyright © 2020-2023  润新知