实验2 汇编源程序编写与汇编、调试
实验2 汇编源程序编写与汇编、调试
1. 实验任务1
此部分书写内容:
- 给出ex1.asm源代码
- 给出使用masm、link工具汇编、链接的命令行及运行结果截图
- 给出使用debug调试的截图
包括:
- 结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图
- 查看PSP的命令及截图
- 使用g命令执行到line16退出执行之前,操作截图
结论:
ex1.asm源代码:
1 ;ex1.asm 2 assume cs:code 3 code segment 4 mov ax, 0b810h 5 mov ds, ax 6 mov byte ptr ds:[0], 1 7 mov byte ptr ds:[1], 1 8 mov byte ptr ds:[2], 2 9 mov byte ptr ds:[3], 2 10 mov byte ptr ds:[4], 3 11 mov byte ptr ds:[5], 3 12 mov byte ptr ds:[6], 4 13 mov byte ptr ds:[7], 4 14 15 mov ah, 4ch 16 int 21h 17 code ends 18 end
使用masm、link工具汇编、链接的命令行及运行结果截图:
使用debug调试:
查看PSP的命令及截图:
使用g命令执行到line16退出执行之前
2. 实验任务2
此部分书写内容:
- 给出ex2.asm源代码
- 给出使用masm、link工具汇编、链接的命令行及运行结果截图
- 给出使用debug调试的截图
包括:
- 结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图
- 灵活使用t命令、p命令、g命令,对ex2.exe进行调试的截图(不一定要单步,有些地方可以用g命令,一次执行多行汇编指令)
- 把ex2.asm中line9 mov cx, 4 改成 mov cx, 8 ,保存后重新汇编、链接、运行并观察结果。
- 结合上述实验和观察,分析、对比ex2.asm和ex1.asm,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?
结论:
ex2.asm源代码:
1 ;ex2.asm 2 assume cs:code 3 code segment 4 mov ax,0b810h 5 mov ds,ax 6 mov bx,0 7 mov ax,101H 8 mov cx,4 9 s: mov [bx],ax 10 add bx,2 11 add ax,101H 12 loop s 13 mov ah,4ch 14 int 21h 15 code ends 16 end
使用masm、link工具汇编、链接的命令行及运行结果截图:
使用debug调试的截图:
t、p、g命令调试:
把cx改为8并重复之前步骤:
对比ex2.asm和ex1.asm:
二者本质上都是通过往显存空间写入数据使之在屏幕上呈图形。区别在于处理方式,一种是循环写入,一种是直接写入。
3. 实验任务3
此部分书写内容:
- 给出源代码
- 给出运行结果截图
- 基于以下实验操作的发现和文字说明
包括:
- 把填充的字数据,从0237H改成0239H,再次保存后,汇编、链接、运行,观察结果。
- 把填充的字数据,从0237H改成0437H,再次保存后,汇编、链接、运行,观察结果。
- 猜测并分析,这个字数据中高位字节里存放的是什么信息,低位字节里存放的是什么信息。
结论:
程序源码:
1 assume cs:code 2 code segment 3 4 mov ax,0b800h 5 mov ds,ax 6 mov bx,07b8h 7 mov cx,16 8 s: mov dx, word ptr 0237h 9 mov ds:[bx],dx 10 add bx,2 11 loop s 12 13 mov ax,4c00h 14 int 21h 15 16 code ends 17 end
运行结果:
0237H改成0239H:
0237H改成0437H:
分析:高位02代表输出字符颜色为绿色,高位04代表输出字符颜色为红色;低位37代表数字字符“7”,低位39代表数字字符“9”;
综上:高位控制输出颜色,低位控制输出内容。
4. 实验任务4
此部分书写内容:
- 程序源代码
- 汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200~0:23F,确认是否将0~63传送至此段内存区域。这部分,要求有截图。
结论:
程序源代码:
1 assume cs:code 2 code segment 3 4 mov ax,0200h 5 mov ds,ax 6 mov cx,64 7 s: mov [bx],bx 8 inc bx 9 loop s 10 11 mov ax,4c00h 12 int 21h 13 14 code ends 15 end
t、p、g命令调试:
d命令查看0:200~0:23F:
5. 实验任务5
此部分书写内容:
- 填空以后的源代码
- 汇编连接后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200之后的若干字节,观察是否将mov ax, 4c00h之前的指令复制到指定内存,这部分要求有截图,并以文字方式说明空白处填写依据。
结论:
程序源代码:
1 assume cs:code 2 code segment 3 mov ax,cs 4 mov ds,ax 5 mov ax,0020h 6 mov es,ax 7 mov bx,0 8 sub cx,5 9 s: mov al,[bx] 10 mov es:[bx],al 11 inc bx 12 loop s 13 mov ax,4c00h 14 int 21h 15 code ends 16 end
调试查看:
分析:
本题要点在于分析好需要赋值的代码区间,通过反汇编可知复制部分长度比代码段总长度少5字节,故第二处填写 sub cx,5 。