首页 > 编程 > ASM > 正文

汇编语言(王爽)——第三次上机

2019-11-10 22:37:57
字体:
来源:转载
供稿:网友

一、实验名称

实验4 [bx]和loop的使用 实验5 编写、调试具有多个段的程序

二、实验目的

掌握汇编语言源程序编写→汇编→链接→调试的方法掌握灵活应用[bx]表示内存单元和loop指令实现循环的用法掌握具有多个段的汇编源程序结构、编写、调试理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式

三、实验内容

教材实验4(P121) 其中:实验任务(1)和(2)合并成一道编程题,题目改成: 综合使用loop,[bx],编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。教材实验5(P133-137)

四、实验步骤

教材实验4(P121)

实验任务(1)和(2) 首先,在t1.asm中写入源程序。 图一 然后,进入虚拟Dos进行编译和连接,并没有警告错误和必须改正的错误。 图二 这是编译和连接产生的目标文件以及可执行文件。用debug对可执行文件进行调试。首先进行反汇编。 图三 图四 先用t命令单步调试代码段前四条语句,在开始对0:200~0:22f内存单元进行修改之前查看0:200~0:22f内存单元的值。然后用g命令运行程序,运行到076A:0011之前。再查看0:200~0:22f内存单元的值。结果显示传送成功。 图五 图六

实验任务(3) 应该将对应的机器码分别存储到指定的内存单元。由于我个人的虚拟Dos默认 CS = 076A,所以第一空应该填写 076A或者CS ,根据对所有指令的机器码的统计,在mov ax,4c00h 指令之前总共有24个字节,所以循环计数寄存器cx 的值为24。并进行了接下来的操作来验证我的推断。 首先在t2.asm 写入源程序。 图七

然后,进入虚拟Dos进行编译和连接,并没有警告错误和必须改正的错误。 图八 图九 先进行反汇编,查看机器码的个数。 图十 用t命令单步调试到循环执行之前,查看0:200 后面若干内存单元的值。再用g命令执行指令到076A:0018之前结束,并再次查看0:200 后面若干的内存单元的值,发现已经被修改并用u命令对0:200后面的内存单元进行反汇编,发现指令被成功复制! 图十一 图十二 图十三

实验教材5(P133-137)

实验任务(5) 首先是程序的源代码。以及编译、连接形成的文件 图十四 图十五 图十六 用u命令进行反汇编,并通过反汇编的内容得知a,b,c段的段地址。并分别查看a,b,c的8个字节的内容。 图十七 用g命令执行指令到076D:001C之前,并用d命令查看c的8个字节。达到了预期的目标! 图十八实验任务(6) 首先是程序的源代码。以及编译、连接形成的文件 图十九 图二十 图二十一 用u命令进行反汇编,可知a段和b段对应的段地址,并用d命令查看在push操作之前每个段的8个字单元。 图二十二 用g命令运行程序到076D:001b之前,并用d命令查看逻辑段b的8个字单元,发现并被正确复制进去。 图二十三
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选