zoukankan      html  css  js  c++  java
  • 实验2 汇编源程序编写与汇编、调试

    一、实验目的
    1. 理解并掌握汇编源程序组成与结构

    2. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法

    3. 理解汇编源程序中地址表示、段寄存器的用法

    4. 理解和掌握寄存器间接寻址方式[bx]

    5. 通过汇编指令loop的使用理解编程语言中循环的本质

    二、实验准备
    1. 学习/复习第5章使用[bx]和loop实现循环的编程应用示例(教材5.5节,5.8节)

    2. 复习第3章「栈」的知识

    3. 结合第4章课件,复习完整汇编源程序编写→汇编→连接→运行→调试的方法

    4. 复习8086汇编中内存单元地址的表示,以及段寄存器DS, SS, ES, CS的用途

    三、实验结论

    1. 实验任务1

    ex1.asm源代码如下:

    ;ex1.asm
    assume cs:code
    code segment
            mov ax, 0b810h
            mov ds, ax
            mov byte ptr ds:[0],1
            mov byte ptr ds:[1],1
            mov byte ptr ds:[2],2
            mov byte ptr ds:[3],2
            mov byte ptr ds:[4],3
            mov byte ptr ds:[5],3
            mov byte ptr ds:[6],4
            mov byte ptr ds:[7],4
            mov ah,4ch
            int 21h
    code ends
    end
    

    使用masm、link工具汇编、链接的过程及结果:

     

     

     使用d命令查看程序段前缀PSP所占的256个字节:

     用u命令反汇编:

     用g命令调试:

     结果:

     2.试验任务2

    ex2.asm程序如下:

    ; ex2.asm 
    assume cs:code 
    code segment
            mov ax, 0b810h 
            mov ds, ax 
            mov bx, 0 
            mov ax, 101H 
            mov cx, 8 
    s:      mov [bx], ax 
            add bx, 2 
            add ax, 101H 
            loop s
            mov ah, 4ch 
            int 21h 
    code ends 
    end
    

      使用masm、link对ex2.asm进行汇编、链接:

     使用u命令对ex2.exe进行反汇编:

     对ex2.exe进行调试:

    t命令单步调试:

     

     p命令单步调试:(循环中的命令不单步执行)

     把ex2.asm中line9 mov cx, 4 改成 mov cx, 8 ,保存后重新汇编、链接、运行的结果:

     结果:

     实现了同样的功能与效果;但ex1为顺序结构,ex2为循环结构,效率上前者更好,但使用循环结构更方便书写。

    3.实验任务3

    ex3.asm的源代码:

    ; ex3.asm
    assume cs:code 
    code segment 
            mov ax, 0b800h 
            mov ds, ax 
            mov bx, 07b8h 
            mov ax, 0437H 
            mov cx, 16 
    s:      mov [bx], ax 
            add bx, 2 
            loop s
            mov ah, 4ch 
            int 21h 
    code ends 
    end
    

    运行后的结果:

     把填充的字数据,从0237H 改成0239H的结果:

     把填充的字数据,从0237H 改成0437H的结果:

     很明显,字数据高位存放的是字符颜色,低位存放的是字符的ASCII码

    4.试验任务4

    ex4.asm代码如下:

    ; ex4.asm
    assume cs:code 
    code segment 
            mov ax, 0
            mov ds, ax 
            mov bx, 200h 
            mov ax, 0
            mov cx, 64 
    s:      mov [bx], ax 
            add bx, 1
            add ax,1 
            loop s
            mov ah, 4ch 
            int 21h 
    code ends 
    end
    

    运行结果如下:

     5.实验任务5

    ex5.asm代码:

    ; ex4.asm
    assume cs:code 
    code segment 
            mov ax, cs
            mov ds, ax 
            mov ax,0020h
            mov es,ax
            mov bx, 0
            mov cx, 17h
    s:      mov al,[bx]
            mov es:[bx],al
            inc bx
            loop s
            mov ah, 4ch 
            int 21h 
    code ends 
    end
    

    反汇编结果:

     

     运行结果:

  • 相关阅读:
    MySQL/MariaDB/Percona数据库升级脚本
    systemd详解
    Nginx下Redmine2.6配置
    Linux下Python获取IP地址
    浅谈Linux内存管理机制
    深入理解PHP Opcode缓存原理
    Varnish – 高性能http加速器
    问题记录
    Java 排序报错
    记录一次数据库链接不够用被drop掉的问题
  • 原文地址:https://www.cnblogs.com/wyf-blogs/p/13927843.html
Copyright © 2011-2022 走看看