实验2 汇编源程序编写与汇编、调试
实验结论
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工具汇编、链接的命令行及运行结果截图
-
使用debug调试的截图
1. 寄存器CX的值
2. 使用u命令精确反汇编
3. 查看PSP的命令及截图
4. 使用g命令执行到程序退出执行之前(即源码文件中line16之前),观察结果。
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工具汇编、链接的命令行及运行结果截图
-
使用debug调试截图
1. cx的值
2. 使用u命令精确反汇编
3. 灵活使用t命令/p命令、g命令,对ex2.exe进行调试
-
结合上述实验和观察,分析、对比ex2.asm和ex1.asm,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?
ex2.asm和ex1.asm实现了相同的功能和效果。具体实现上,ex1.asm重复使用mov指令向内存单元中写入数据,ex2.asm使用loop指令来实现循环功能,CX中存放循环次数,简化了程序。
3. 实验任务3
- ex3.asm源代码如下:
;ex3.asm
assume cs:code
code segment
mov ax,0b800h
mov ds,ax
mov bx,07b8h
mov cx,16
s: mov [bx],0237h
add bx,2
loop s
mov ah,4ch
int 21h
code ends
end
- 运行结果截图
- 把填充的字数据,从0237H改成0239H,再次保存后,汇编、链接、运行,观察结果。
- 把填充的字数据,从0237H改成0437H,再次保存后,汇编、链接、运行,观察结果。
- 猜测并分析,这个字数据中高位字节里存放的是什么信息,低位字节里存放的是什么信息。
高位字节里存放显示颜色,低位字节里存放的是显示数字
4. 实验任务4
- 源代码如下:
;ex4.asm
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s: mov [bx],bl
add bx,1
loop s
mov ah,4ch
int 21h
code ends
end
- 汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试
- 用d命令查看0:2000:23F,确认是否将063传送至此段内存区域
5. 实验任务5
- 填空
- 源码如下:
;ex5.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 ax,4c00H
int 21H
code ends
end
- 用debug调试
- 用d命令查看0:200之后的若干字节
- 观察是否将mov ax, 4c00h之前的指令复制到指定内存