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

    ①如图所示CPU执行程序,程序返回前,data段中的数据为 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 。

    ②CPU执行程序,程序返回前,cs=076C,ss=076B,ds=076A 。

    ③cs=076c,ds=076a,ss=076b

    所以程序加载后,code段的段地址为X,则data段的段地址为 X-2 ,stack段的段地址为 X-1 。

    (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

     

    用g指令执行到001D

    ①d指令查看0到f的内容CPU执行程序,程序返回前,data段中的数据为 0123h,0456h 。

    ②CPU执行程序,程序返回前,cs= 076CH ,ss= 076BH ,ds= 076AH 。

    ③由上题可以看出如果code段的段地址为X,则data段的段地址为 X-2 ,stack段的段地址为 X-1 。

    ④对于如下定义的段:

    name segment

    ……

    name ends

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

    程序加载后分配空间是以16个字节为单位的,也就是说如果不足16个字节的也分配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

    ①CPU执行程序,程序返回前,data段中的数据为0123h,0456h未发生变化 。

    ②CPU执行程序,程序返回前,如图所示r命令CS= 076AH ,SS= 076EH ,DS= 076DH 。

    ③由上题可知程序加载后,code段的段地址为X,则data段的段地址为 X+3 ,stack段的段地址为 X+4 。

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

    第三题可以执行 因为(3)中的数据段和栈段写在指令后面 而(1)(2)题是将数据段和栈段写在前面,不指明程序入口程序将默认从首个单元开始执行。

    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

            db 0,0,0,0,0,0,0,0

    c ends

    code segment

    start:

        mov ax,a
        mov ds,ax将a段放入ds寄存器中
        mov ax,c
        mov es,ax  将c段放入附加段寄存器中也就是将es:0到f置零
    mov bx,0 mov cx,8 s1: mov al,[bx] mov es:[bx],al inc bx loop s1通过循环将a段放入es中 mov ax,b mov ds,ax

    mov bx,0 mov cx,8 s2: mov al,[bx] add es:[bx],al inc bx loop s2将b段与es中的a段相加保存在es寄存器中 mov ax,4c00h int 21h

          

    code ends

    end start

    将指令执行到程序返回之前 查看es:0 到f 的数据正好为a段和b段数据之和。

    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 0,0,0,0,0,0,0,0
    b ends

    code segment
    start: 
    mov ax,a
    mov ds,ax  将a段放入ds寄存器
    mov ax,b
    mov ss,ax将b段放入ss寄存器
    mov sp,10h 申请一个栈空间
    mov bx,0
    mov cx,8
    s:
    push ds:[bx]  将ds中a的值放入ss中
    add bx,2
    loop s
    mov ax,4c00h
    int 21h
    code ends
    end start

    最后查看ss:0到f中的数据恰好为a段的前八个数据的逆序。

    这六个实验花了我不少时间加深了我对栈空间和数据段的理解

  • 相关阅读:
    2017-5-25 母版页
    2017-5-25 分页加条件查询合体
    2017-5-23 WebForm 中的分页功能和条件查询功能
    2017-5-17 WebForm 基础
    2017-5-14 心情
    2017-5-10 小型人员管理系统
    2017-5-9 打开唯一窗体的实例操作
    2017-5-8 TreeView 实现三级联动 (递归方法)
    2017-5-7 三级联动数据库 数据保存
    2017-5-7 三级联动
  • 原文地址:https://www.cnblogs.com/WJL123/p/10035243.html
Copyright © 2011-2022 走看看