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

1.实验任务1

使用任意一款文本编辑器,编写8086汇编源程序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命令对ex1.exe进行精确反汇编:

使用g命令执行到程序退出执行之前(即源码文件中line16之前):

 

 2.实验任务2

使用任意一款文本编辑器,编写8086汇编源程序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对ex2.asm进行汇编、链接,得到可执行文件ex2.exe:

结合可执行文件中寄存器CX的值,使用u命令对ex2.exe进行精确反汇编:

 

灵活使用t命令、p命令、g命令,对ex2.exe进行调试:

 

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

 

结论:ex2.asm和ex1.asm实现功能和效果相同,都是实现了累加,不同在于ex2.asm使用了loop循环而ex1.asm一条条执行

 

3.实验任务3

综合使用loop,[bx],编写完整汇编程序,实现向内存b800:07b8开始的连续16个字单元重复填充字数据0237H。 

ex3.asm源程序:

assume cs:code
code segment
mov ax,0b810h
mov ds,ax
mov bx,07b8h
mov cx,16
s: mov [bx],0437h
add bx,2h
loop s
mov ax,4c00h
int 21h
code ends
end

运行结果:

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

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

 

猜测:高位存放颜色信息,低位存放符号信息

 

 4.实验任务4

编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。

ex4.asm源程序:

assume cs:code
code segment
mov ax,0
mov ds,ax
mov cx,64
mov dl,0
s: mov [bx],dl
inc dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end

汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200~0:23F,确认是否将0~63传送至此段内存区域:

 

 5.实验任务5

assume cs:code
code segment
        mov ax,0
        mov ds,ax
        mov bx,200h
        mov cx,64
        mov dl,0
s:      mov [bx],dl
        inc dl
        inc bx
        loop s
        mov ax,4c00h
        int 21h
code ends
end

 首先第一空填cs/code,获得程序段地址,第二空先任意填,然后编译程序,查看得知程序长度cx=1c,减去程序返回指令字节数得到cx=17h,因此第二空填17h

 

实验总结:

在进行汇编、连接、运行时可以简化;

使用g命令+地址可以直接跳到要执行的命令处;

使用p命令执行循环或执行最后一条命令并退出。

 

 

posted @ 2020-10-30 21:00  突进的小母猪  阅读(107)  评论(4)    收藏  举报