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

该博客详细记录了一次关于汇编语言的实验过程,包括利用[bx]和loop指令实现内存数据传送,以及编写、调试具有多个段的程序。实验目的是掌握汇编程序的编写、调试方法,灵活运用[bx]和loop,理解多段程序的内存分配。实验内容涵盖教材中的多个练习,通过Debug工具进行单步调试和内存查看,验证了程序的正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验名称
  1. 实验4 [bx]和loop的使用
  2. 实验5 编写、调试具有多个段的程序
二、实验目的
  1. 掌握汇编语言源程序编写→汇编→链接→调试的方法
  2. 掌握灵活应用[bx]表示内存单元和loop指令实现循环的用法
  3. 掌握具有多个段的汇编源程序结构、编写、调试
  4. 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式
三、实验内容
  1. 教材实验4(P121)
    其中:实验任务(1)和(2)合并成一道编程题,题目改成:
    综合使用loop,[bx],编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。
  2. 教材实验5(P133-137)
四、实验步骤
  1. 教材实验4(P121)

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

  2. 实验教材5(P133-137)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值