• 实验 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个字节为倍数,将其连续地分配在一个储存空间中。
     
  • 相关阅读:
    移动端拖拽
    原生js增加,移除类名
    js自执行函数
    页面加载初始化方法
    writing-mode,文字竖直书写,字符之间距离,单词之间距离
    滚动鼠标达到一点范围时的跑秒效果,从0开始一直加在规定时间内加到最大值
    haley解决中文字段名称字数不同时两端对齐的问题
    常用的一些css实现的小效果,比如三角形,小三角,阴影等
    html几个比较常用的颜色名称
    Spring--通过注解来配置bean
  • 原文地址:https://www.cnblogs.com/xihongqing/p/10017194.html
Copyright © 2020-2023  润新知