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


    实验任务

    (1)

    (2)

    (3)

    (4)

     若将最后一条指令”end start“改为”end“,(3)中的程序仍然可以正常执行。

    原因:如果不指明程序的入口,程序的cs:ip值没有被设置为指向该入口,就会以程序段的第一条指令为默认入口了,然后程序会在end处结束,无法运行到代码段。

    (5)

    ①实验代码

    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
    c1 segment   ; 在集成软件环境中,请将此处的段名称由c→改为c1或其它名称
      db 8 dup(0)
    c1 ends     ; 改的时候要成对一起修改
    code segment
    start:
    mov ax,c1
    mov es,ax
    mov bx,0
    mov cx,8
    s: 
    mov ax,a
    mov ds,ax
    mov dl,[bx]
    mov es:[bx],dl
    mov ax,b
    mov ds,ax
    mov dl,[bx]
    add es:[bx],dl
    inc bx
    loop s
    mov ax,4c00h
    int 21h
    code ends
    end start
     
     

    ②在实现数据相加前,逻辑段c的8个字节

     

    ③ 执行完实现加运算的代码后,逻辑段c的8个字节

    ④验证是否完成正确的数据相加

    c1中数据符合a的数据与b的数据加和。

    (6)

    ①程序代码

    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 cx,8h
    mov bx,0
    mov sp,10h
    s:
    push[bx]
    add bx,2
    loop s
    mov ax,4c00h
    int 21h
    code ends
    end start
    ②查看逻辑段b的8个字单元信息截图
    ③执行 push操作,然后再次查看逻辑段b的8个子单元信息

     ④:对比②和③

     经验证,已成功实现逆序存储。
    总结与体会
    通过本次实验,我掌握了如何来编写、调试具有多个段的一个程序,
    具有多个段的程序相对于仅具有一个段的程序而言,能把数据,代码和栈段分开存储,不仅提高了程序整体的存储容量,还使程序显得井然有条,通过对多个段的定义,使我们对数据的操作更方便清晰了。 
    大致清楚了为具有多个段的一个程序分配储存空间的方式,以16个字节为倍数,将其连续地分配在一个储存空间中。
     
  • 相关阅读:
    【Java】增强的for流程
    xxxxx
    lyphtesttest rename of file
    lyphtesttest winmerge class の比較
    lyphtesttest sql of system session
    lyphtesttest 常用ファイルの操作、検索。excelの操作  java
    Maven3(2.集成maven插件到eclipse(包含eclipse安装svn步骤))
    Maven3(1.下载maven安装与配置)
    centos6 安装hbase+hadoop单机版
    centos6 安装jdk1.6
  • 原文地址:https://www.cnblogs.com/xihongqing/p/10017194.html
Copyright © 2020-2023  润新知