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

    如图可见正确

  • 相关阅读:
    数据字典/动态性能视图
    参数管理
    expdp实现oracle远程服务器导出到本地
    jquery 操作单选按钮
    vs2012加载T4MVC模板
    Asp.net Mvc 过滤器执行顺序
    oracle版本及字符集查询
    ora-01658: 无法为表空间*****中的段创建 INITIAL 区
    SmtpClient发送邮件
    盒模型padding和margin对滚动条位置的影响
  • 原文地址:https://www.cnblogs.com/jasonIL/p/10023118.html
Copyright © 2011-2022 走看看