zoukankan      html  css  js  c++  java
  • 实验五

    编写、调试具有多个段的程序

      (1)将下面的程序编译连接,用debug加载,跟踪然后回答问题 

      assume cs:code,ds:data,ss:stack

      data segment

              dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

      data ends

      stack segment

              dw 0,0,0,0,0,0,0,0

      stack ends

      code segment

      start:  mov ax,stack

              mov ss,ax

              mov sp,16

              mov ax,data

              mov ds,ax

              push ds:[0]

              push ds:[2]

              pop ds:[2]

              pop ds:[0]

              mov ax,4c00h

              int 21h

      code ends

      end start

      (1)CPU执行程序,程序返回前,data段中的数据 不变 。

      (2)CPU执行程序,程序返回前,CS=076C,SS=076B,DS=076A 。

      (3)设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。

    编辑截图:

    编译,连接

    调试:

    通过debug发现应该查看001D处的内容,于是用g命令定位到001D处,并用d查看

    通过上面的步骤可以得到填空的答案

    (2)将下面的程序编译连接,用Debug加载,跟踪,然后回答问题

      assume cs:code,ds:data,ss:stack

      data segment

              dw 0123h,0456h

      data ends

      stack segment

              dw 0,0

      stack ends

      code segment

      start:  mov ax,stack

              mov ss,ax

              mov sp,16

              mov ax,data

              mov ds,ax

              push ds:[0]

              push ds:[2]

              pop ds:[2]

              pop ds:[0]

              mov ax,4c00h

              int 21h

      code ends

      end start

    (1)CPU执行程序,程序返回前,data段中的数据 不变 。

    (2)CPU执行程序,程序返回前,CS= 076CH ,SS= 076BH ,DS= 076AH 。

    (3)设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。

    (4)对于如下定义的段:

    name segment

    ……

    name ends

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

    编辑:

    编译和连接

    Debug 调试:

    通过反汇编可以看到data前后数据不变

    有结果可以知道cs ss ds 的值,通过第二问可以推断第三问的答案

    第四问需要判断能否被16 整除

    (3)将下面的程序,用Debug加载,跟踪,然后回答问题

      

      assume cs:code,ds:data,ss:stack

      code segment

      start:  mov ax,stack

              mov ss,ax

              mov sp,16

              mov ax,data

              mov ds,ax

              push ds:[0]

              push ds:[2]

              pop ds:[2]

              pop ds:[0]

              mov ax,4c00h

              int 21h

      code ends

      data segment

              dw 0123h,0456h

      data ends

      stack segment

              dw 0,0

      stack ends

      end start

      (1)CPU执行程序,程序返回前,data段中的数据 不变 。

      (2)CPU执行程序,程序返回前,CS= 076AH ,SS= 076EH ,DS= 076DH 。

      (3)设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X+3 ,STACK段的段地址为 X+4 。

    编辑:

    编译和连接:

    Debug 调试:

    (1)结论和一二一样

    (2)(3)还是可以从debug得出

    任务(4):如果将(1)(2)(3)题中最后一条指令“end start ”改成“ end ”(不指明程序的入口),则哪个程序可以正确执行?理由

      我认为第三条指令可以正确执行,因为前两个数据段是写在前面的,如果不指明程序入口,程序就会从分配的空间开始执行

      而第三个数据段写在了后面,于是可以正确执行

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

      

    assume cs:code
    a segment
    db 1,2,3,4,5,6,7,8
    a ends

    b segment
    db 1,2,3,4,5,6,7,8
    b ends

    c segment ; 在集成软件环境中,请将此处的段名称由c→改为c1或其它名称
    db 8 dup(0)
    c ends ; 改的时候要成对一起修改
    code segment
    start:
    mov ax,a
    mov ds,ax
    mov ax,c
    mov es,ax

    mov bx,0
    mov cx,8
    s1: mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s1

    mov ax,b
    mov ds,ax

    mov bx,0
    mov cx,8
    s2: mov al,[bx]
    add es:[bx],al
    inc bx
    loop s2

    mov ax,4c00h
    int 21h
    code ends
    end start

    查看abc段

    任务(6):程序如下,编写code中的代码,用push指令将a段中的前8个字形数据,逆序存储到b段中

    assume cs:code
    a segment
    dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
    a ends

    b segment
    dw 8 dup(0)
    b ends

    code segment
    start:
    mov ax,a
    mov ds,ax

    mov ax,b
    mov ss,ax
    mov sp,20h

    mov bx,0
    mov cx,10h

    s: push ds:[bx]
    inc bx
    inc bx
    loop s

    mov ax,4c00h
    int 21h
    code ends
    end start

    分别查看push指令执行前后的变化

    总结:

    通过本次实验我发现了自己在细节处理中的不足,以及对前面知识点的遗忘

    但是同时也复习了之前的知识点,并且学会了编写多行代码的能力

  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/acmblog/p/10036991.html
Copyright © 2011-2022 走看看