• 汇编语言 实验5


    实验5

    实验任务1:编写、运行书中含有多个段的程序,观察实验结果,完成填空

    (1)

     

    (2)

     

    (3)(4)

     

    简要调试过程:

     

     

    tips:

    程序返回后有许多附属的代码段

    实验任务2:编写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

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

    code segment
    start:
    ;修改(不能用栈,因为入栈出栈都是以字数据为一个单元来完成的,而这里是字节型数据)
    mov ax,a
    mov ds,ax

    mov bx,0
    mov cx,8h

    to:mov ah,0
    mov al,[bx]
    mov dx,b
    mov es,dx
    add al,es:[bx]
    mov dx,c0
    mov es,dx
    mov es:[bx],al
    add bx,1
    loop to
    ;修改
    mov ax,4c00h
    int 21h
    code ends
    end start

     进入debug环境,用反汇编查看代码:

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

     

    调试过程:

     

    实验任务3:编写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,10h

    mov bx,0
    mov cx,8h

    s0:push [bx]
    add bx,2h
    loop s0

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

    进入debug环境后,用反汇编查看代码:

    在 push 操作执行前后,查看逻辑段 b 的 8 个字单元:

     

    调试过程:

     

     

     

    实验5——总结

    收获:通过这次实验,我懂得了怎么将各个寄存器分段进行存储(也可以在cs段前面定义数据,但是这样没有用分段这么简洁明了),知道了分段存储时段与段之间的相对位置关系,明白了标号和程序入口的重要性,学会了利用栈段做各种数据存储的操作。

    问题:分段存储时,为什么段与段之间的相对位置不会发生改变呢?这样的相对位置是如何得到的呢?

  • 相关阅读:
    内网穿透
    canvas 满天星
    swift 获取文件的Md5值
    swift UITextView内容距离边框边距设置
    swift UITextField光标聚焦以及光标颜色修改
    swift3.0 移除当前页面的前一个页面
    swift3.0 屏幕截图并且保存到本地相册
    swift3.0 UITableView侧滑支持多选项
    swift3.0 点击UIScrollView中输入框之外的区域关闭键盘
    swift3.0 底部弹出菜单 UIAlertController的使用
  • 原文地址:https://www.cnblogs.com/cjh-1023/p/10015659.html
Copyright © 2020-2023  润新知