实验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工具汇编、链接的命令行及运行结果截图

实验2 汇编源程序编写与汇编、调试

给出使用debug调试的截图

①结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图 

实验2 汇编源程序编写与汇编、调试

②查看PSP的命令及截图

实验2 汇编源程序编写与汇编、调试

③使用g命令执行到line16退出执行之前,操作截图

实验2 汇编源程序编写与汇编、调试

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, 4
s:  mov [bx], ax
    add bx, 2
    add ax, 101H
    loop s
    mov ah, 4ch
    int 21h
code ends
end

给出使用masm、link工具汇编、链接的命令行及运行结果截图

实验2 汇编源程序编写与汇编、调试

给出使用debug调试的截图

①结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图

实验2 汇编源程序编写与汇编、调试

②灵活使用t命令/p命令、g命令,对ex2.exe进行调试的截图(不一定要单步,有些地方可以 用g命令,一次执行多行汇编指令)

实验2 汇编源程序编写与汇编、调试

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

实验2 汇编源程序编写与汇编、调试

实验2 汇编源程序编写与汇编、调试

回答问题:结合上述实验和观察,分析、对比ex2.asm和ex1.asm,它们实现的是否是相同的功能和效 果?在具体实现上有什么不同?

答:ex1.asm和ex2.asm实现的都是相同的功能和效果。在具体实现上ex1.asm是逐步完成累加过程,ex2.asm是利用loop循环实现累加过程,更加简捷。

3. 实验任务3 

给出源代码

;ex3.asm
assume cs:code
code segment
   mov ax,0b800h
   mov ds,ax
   mov bx,07b8h
   mov ax,0237h

   mov cx,16
s: mov [bx],ax
   add  bx,2
   loop s

   mov ax,4c00h
   int    21h
code ends
end

给出运行结果截图

实验2 汇编源程序编写与汇编、调试

基于以下实验操作的发现和文字说明。

①把填充的字数据,从0237H 改成0239H,再次保存后,汇编、链接、运行,观察结果

实验2 汇编源程序编写与汇编、调试

②把填充的字数据,从0237H 改成0437H,再次保存后,汇编、链接、运行,观察结果

实验2 汇编源程序编写与汇编、调试

③猜测并分析,这个字数据中高位字节里存放的是什么信息,低位字节里存放的是什么信息

从0237H 改成0239H,颜色不变,内容改变,得到这个字数据中低位字节存放的是显示在屏幕上的内容信息;

从0237H 改成0437H,颜色改变,内容不变,得到这个字数据中高位字节里存放的是显示在屏幕上字体颜色的信息。

4. 实验任务4

程序源代码

;ex4.asm
assume cs:code
code segment
    mov ax,0h
    mov ds,ax
    mov bx,200h

    mov cx,40h
s:    mov [bx],ax
    inc    bx
    inc    ax
    loop s

    mov ax,4c00h
    int    21h
code ends
end

汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试

实验2 汇编源程序编写与汇编、调试

实验2 汇编源程序编写与汇编、调试

实验2 汇编源程序编写与汇编、调试

用d命令查看0:200~0:23F,确 认已经将0~63传送至此段内存区域

实验2 汇编源程序编写与汇编、调试

5. 实验任务5

填空以后的源代码

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 ax,4c00h
    int    21h
code ends
end

以文字方式说明空 白处填写依据

答:①第一处:需要知道ax的初始地址,所以填cs

②第二处:利用u命令对代码进行反汇编,得到范围076a:0000-076a:0017,所以填17h

汇编连接后,灵活使用debug的t命令、g命令、p命令调试

实验2 汇编源程序编写与汇编、调试

实验2 汇编源程序编写与汇编、调试

实验2 汇编源程序编写与汇编、调试

用d命令查看0:200之后的若干字节, 观察之后发现已经将mov ax, 4c00h之前的指令复制到指定内存

实验2 汇编源程序编写与汇编、调试

上一篇:34.Linux驱动调试-根据系统时钟定位出错位置


下一篇:[图形学] Adaptive Shadow Map