zoukankan      html  css  js  c++  java
  • 实验 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

    如图可见正确

  • 相关阅读:
    Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
    Atitit  OOCSS vs bem
    Atitit.js模块化 atiImport 的新特性javascript import
    Atitit.css 规范 bem 项目中 CSS 的组织和管理
    Atitit.eclipse git使用
    Atitit jOrgChart的使用  组织架构图css html
    Atitit.java相比c#.net的优点 优缺点  v2 q330
    Atitit.判断元素是否显示隐藏在父元素 overflow
    Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..
    Atitit..css的体系结构
  • 原文地址:https://www.cnblogs.com/jasonIL/p/10023118.html
Copyright © 2011-2022 走看看