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

实验任务1
首先展示ex1的代码

;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,用d命令查看

用u命令反汇编

用g命令运行

实验任务2
展示代码如下:

; 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

然后使用工具进行调试,链接

使用u命令进行反汇编

随后进行单步调试

观察后发现,实验2和实验1的效果相同,实验任务1中的是采用顺序结构的方式,全都写出来,而实验任务2中采用了循环的方式,
实验任务3

源代码如下:

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

对任务三的代码进行链接并且运行

修改成0239H结果为

修改成0437H结果为

对比得出,对于0437H这种数据,高位存放颜色,低位存放数字内容,从而控制最终输出情况
实验任务4
代码如下:

; ex3.asm
assume cs:code
code segment
mov ax, 0020h
mov ds, ax
mov bx, 0
mov ax, 0H
mov cx, 0040H
s: mov [bx], bl
add bx, 1
loop s
mov ah, 4ch
int 21h
code ends
end

汇编,链接结果为:

单步调试,用t,g命令进行查看

用d命令进行观察,验证结果

实验任务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

汇编,链接结果为

运行并进行反汇编验证,确定是同样的程序

判断根据:之前程序根据反汇编发现到0017,因此只需要复制17H个字节

总结与反思
主要运用了loop进行循环,来完成多个复制操作,也部分用到了mov, add等基础操作,总体主要是循环部分的实现,也巩固了之前的知识,更熟练地进行了汇编的指令编辑。

posted @ 2020-11-06 17:21  JJo_Nak  阅读(118)  评论(3)    收藏  举报