汇编语言程序设计实验报告四

南京信息工程大学实验报告 实验名称 实验 4 [bx]和loop的使用 实验日期 得分

学院 计软院

专业 计算机科学与技术

年级 2017级

班次 5班 姓名 陈奕明 学号 20171308194 


一、实验目的


1. 理解和掌握寄存器间接寻址方式[bx]

2. 通过汇编指令loop的使用理解编程语言中循环的本质

3. 熟练掌握使用debug按需调试完整汇编源程序的方法


二、实验准备
1. 学习/复习第 5章使用[bx]和loop实现循环的编程应用示例(教材 5.5节,5.8节)

2. 复习第3章「栈」的知识 3. 结合第4章课件,复习完整汇编源程序编写→汇编→连接→运行→调试的方法


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

2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据 0~63(3FH)。 (1)必做:综合使用loop, [bx], mov实现 (2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过 指令实现)

3. 教材实验4(3)(P121)


四、实验结论
1. 实验内容1

(1)源代码:

assume cs:code
code segment

mov ax, 0b800h
mov ds, ax

mov bx,07b8h
mov ax,0441h

mov cx,15

s: mov ds:[bx],ax
add bx,2
loop s

mov ah,4ch
int 21h
code ends
end

第一次实验截图:

汇编,连接生成可执行文件完成。

可执行文件执行结果如下:与老师所给样件符合

(2)将源代码程序中字数据0403H→修改为0441H,再次运行,截图显示运行结果。 

数据修改后,可执行文件执行结果如上


2. 实验内容2(必做部分) (1)源代码 (2)汇编、链接无误后,灵活使用 debug 的 t 命令、g 命令、p 命令调试,用 d 命令 查看0:200~0:23F,确认是否将0~63传送至此段内存区域。这部分,要求有截图。 (选做部分,如完成,也按上述要求在博客文档中撰写相应内容)

源码如下:

assume cs:code
code segment

mov ax, 0020h
mov ds, ax

mov cx,64
mov bx,0

s: mov ds:[bx],bx
add bx,1
loop s

mov ah,4ch
int 21h
code ends
end


实验结果如上,0:200~0:23F所指的内存空间已经按照其连续顺序被赋了指定的值
3. 实验内容3

(1)源代码 :

assume cs:codesg
codesg segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,0017h
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
codesg ends
end


(2)汇编连接后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200 之后的若干字节,观察是否将mov ax, 4c00h之前的指令复制到指定内存,这部分要求有截 图,并以文字方式说明空白处填写依据。

这道题思路如下:

首先第一个空应该是填cs 因为cs寄存器指向了程序的开始处,而第二个空的话我们知道这段程序的代码长度在cx中存放(用debug来调试时)。所以我们可以先在 2 空处填上cx,即先让程序能编译链接生成对应的target.exe文件,然后用debug t5exe来对其调试,然后输入r后查看cx的值,如果不知道mov ax,4c00h 和int 21h占了多少字节,都可以通过输入u后就可以看到各条命令占了多少字节。获得了总长度之后,再用其减去mov ax,4c00h 和int 21h占用的字节,所得的结果就是(2)出所应该填写的值了。

 

汇编,连接,生成可执行文件。

由这里可以看到cx寄存器的值为1B,那还要减去mov ax,空间4c00h 和int 21h这两条指令的大小

由上可得,循环次数为17次,所以第二空填入为0017h

填入后重新调试代码,运行结果如下:

五、总结与体会
loop可以大大简化程序中需要重复执行的部分,提高了代码的可读性,需要在以后的学习中认真体会这一点。

猜你喜欢

转载自www.cnblogs.com/cymwn-com/p/10018172.html
今日推荐