当前位置: 首页 > news >正文

《计算机组成原理与汇编语言程序设计》实验报告四 Debug及指令测试

一、实验学时

        课2学时,课后2学时

二、实验目的

        1) 通过实验掌握Dos环境下常用工具软件 EDIT,MASM和LINK的使用。

        2) 通过实验掌握伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。

        3) 通过实验实现汇编语言Helloworld。

        4) 通过实验掌握了解INT 21H 中断功能。

三、实验要求

        1)做好实验预习,复习汇编语言各种伪指令的功能。

        2)按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。

        3)截取各步骤截图,为源码写好注释,书写实验报告。

四、实验内容

        1、用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为Hello.ASM。将源文件放到Dosbox挂载的目录下面。

        2、用MASM对源文件进行汇编,产生Hello.OBJ文件和Hello.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

        3、用edit或Type命令显示产生的Hello.LST文件。

        4、用LINK将.OBJ文件连接成可执行的Hello.EXE文件。

        5、在DOS状态下运行LINK产生的Hello.EXE文件。

        6、详细记录各步骤,并详细撰写源代码注释。

        程序:

DSEG    SEGMENT

MESS    DB   'Hello,World!' ,0DH,0AH,24H

DSEG    ENDS

SSEG    SEGMENT PARA STACK

        DW  256 DUP(?)

SSEG    ENDS

CSEG    SEGMENT

        ASSUME  CS:CSEG,DS:DSEG

BEGIN:  MOV AX,DSEG

        MOV DS,AX

        MOV DX,OFFSET MESS

        MOV AH,9

        INT 21H

        MOV AH,4CH

        INT 21H

CSEG    ENDS

        END  BEGIN

五、实验步骤

1、用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为Hello.ASM,将源文件放到Dosbox挂载的目录下面。

        (1)在桌面新建一个文本文件,然后将源代码复制粘贴到文本文件中,对应的文本输入界面如图5-1-1所示:

图5-1-1 文本输入界面

        (2)源代码输入完毕后保存文本文件,然后将文本文件hello.txt转变为hello.ASM文件,对应的文件转化界面如图5-1-2所示:

图5-1-2 文件转化界面

        (3)将hello.ASM文件放到Dosbox挂载的目录下,对应的文件挂载界面如图5-1-3所示:

图5-1-3 文件挂载界面

2、用MASM对源文件进行汇编,产生Hello.OBJ文件和Hello.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

        (1)打开Dosbox然后用MASM对源文件进行汇编,让其产生Hello.OBJ文件和Hello.LST文件,对应的语句输入界面如图5-2-1所示:

图5-2-1 语句输入界面

        (2)运行结束后到对应的目录查看是否生成了自己需要的文件,对应的文件生成界面如图5-2-2所示:

图5-2-2 文件生成界面

3、用edit或Type命令显示产生的Hello.LST文件。

        (1)用edit命令显示产生的Hello.LST文件,对应的内容显示界面如图5-3-1所示:

图5-3-1 edit内容显示界面

        (2)用Type命令显示产生的Hello.LST文件,对应的内容显示界面如图5-3-2所示:

图5-3-2 Type内容显示界面

4、用LINK将.OBJ文件连接成可执行的Hello.EXE文件。

        (1)用LINK将.OBJ文件连接成可执行的Hello.EXE文件,对应的命令键入指令界面如图5-4-1所示:

图5-4-1 命令键入指令界面

        (2)运行结束后到对应的目录查看是否生成了自己需要的文件,对应的文件生成界面如图5-4-2所示:

图5-4-2 文件生成界面

5、在DOS状态下运行LINK产生的Hello.EXE文件,对应的文件运行结果界面如图5-5-1所示:

图5-5-1 文件运行结果界面

  1. 详细撰写源代码的各行注释。

DSEG  SEGMENT ;定义数据段

MESS  DB 'Hello,World!',0DH,0AH,24H ;在数据段中定义一个字符串

DSEG  ENDS ;数据段结束

SSEG  SEGMENT PARA STACK ;定义栈段

      DW  256 DUP(?) ;定义一个256字节的栈

SSEG  ENDS ;栈段结束

CSEG  SEGMENT ;定义代码段

      ASSUME  CS:CSEG,DS:DSEG ;建立代码段和数据段的关联性

BEGIN: MOV AX,DSEG ;将数据段的段地址放入AX寄存器中

       MOV DS,AX ;将AX中的值移动到DS寄存器中

       MOV DX,OFFSET MESS ;将字符串的偏移地址放入DX寄存器中

       MOV AH,9 ;将BIOS中INT 21H功能码9H号(在AH寄存器中存放)定义存入AH寄存器中

       INT 21H ;调用BIOS中的INT 21H中断

       MOV AH,4CH ;将BIOS中INT 21H功能码4CH号(在AH寄存器中存放)定义存入AH寄存器中,作为退出程序的系统调用

       INT 21H ;结束程序 返回操作系统

CSEG   ENDS ;代码段结束

       END  BEGIN ;程序结束

六、实验小结

1、问题和解决方法:

(1)实验问题:进入DEBUG中进行命令输入的过程中无法退出当前的指令页面。

解决方法:使用DEBUG的命令Q进行回车后即可实现当前页面的退出。

(2)实验问题:在使用DOSBOX的时候会出现程序无法启动的情况。

解决方法:程序无法启动,可能是因为程序缺少某些依赖项或者与其他程序发生冲突,重新安装程序后程序可以正常启动。

(3)实验问题:在打开DOSBOX的过程中程序出现了错误信息。

解决方法:是由于程序文件损坏或者缺失导致的,对自己的程序文件进行检查后发现内部的文件语句出现了一行多条汇编语言的情况,对汇编语句进行修改后错误消失。

(4)实验问题:程序在运行过程中较为缓慢。

解决方法:由于计算机的硬件配置不足所导致,关闭其他应用程序后程序恢复正常的运行速度。

(5)实验问题:在程序运行的过程中出现了程序运行崩溃的情况。

解决方法:由于程序与其他软件发生了冲突所导致,以管理员权限运行程序后对应的问题得到解决。

(6)实验问题:在程序运行的过程中出现了界面显示不正常的情况。

解决方法:由于程序分辨率与计算机显示器分辨率不匹配造成的,修改计算机的显示器分辨率以及程序的分辨率后问题得到解决。

(7)实验问题:在程序运行的过程中程序无法读取文件。

解决方法:由于程序不在当前的挂载目录下,将文件拷贝到程序的工作目录下后错误消失。

2、心得体会:

(1)在使用DOSBOX进行汇编语言的编程过程中会用到DEBUG命令,如果成功进入DEBUG后会显示提示符‘—’。

(2)程序的编辑可以是各种文本编辑器,EDIT、记事本等都可以,编辑完成保存为filename.asm放到asm或masm当前目录即可。

(3).lst 文件是列表文件,列表文件同时给出源程序和机器语言程序,从而使调试变得方便,但该文件可有可无,如不需要直接回车便可。

(4).crf文件是交叉符号表,该表给出了用户定义的所有符号,对每个符号都列出了将其定义的所在行号和引用的行号,并在定义行号上加上#号,同列表文件一样,交叉符号表也是为了方便调试,可有可无,如不需要直接回车便可。

(5)汇编过程中产生目标文件之后(.obj),但是目标文件用的是浮动地址,不能直接上机执行,必须使用连接程序将其转换成可执行文件(.exe)。

(6).map文件是列表分配文件,也称映像文件,它给出每个段在内存中的分配情况,此文件也可有可无,一般直接回车便可。

(7).lib文件是用户程序用到的库文件,如有包含,输入库名称便可,若无回车便可。

(8)在进行Debug和指令测试时,会遇到各种各样的问题。为了更好地总结和归纳这些经验教训,应该注意记录每一个问题以及相应的解决方案。可以记录在笔记本、电脑中,也可以整理成表格,以便后续查阅或与他人分享。

(9)在测试指令时,需要确保每一个功能都经过测试并且能够成功执行。对于最常用的指令,需要进行详细的测试,并结合实际应用场景来验证其正确性。

http://www.dtcms.com/a/301402.html

相关文章:

  • setnonblocking函数用途和使用案例
  • 在本地环境中运行 ‘dom-distiller‘ GitHub 库的完整指南
  • OSPF路由协议 多区域
  • 【ESP32】无法找到: “${env:IDF_PATH}/components/“的路径报错问题以及CMAKE构建不成功问题
  • Cursor报错解决【持续更新中】
  • 金融科技中的远程开户、海外个人客户在线开户、企业客户远程开户
  • 深入解析Java运行机制与JVM内存模型
  • 【Web APIs】JavaScript 节点操作 ⑩ ( 节点操作综合案例 - 动态生成表格案例 )
  • windows 11 JDK11安装
  • LeetCode 239:滑动窗口最大值
  • 五自由度磁悬浮轴承转子不平衡振动抑制破局:不平衡前馈补偿+自抗扰控制实战解析
  • MySQL 全详解:从入门到精通的实战指南
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-138节(MySQL的综合案例)
  • 设备分配与回收
  • 数据处理实战(含代码)
  • OpenFeign-远程调用((Feign的使用方法))
  • Spring Boot 配置文件常用配置属性详解(application.properties / application.yml)
  • 【PCIe 总线及设备入门学习专栏 5.3.4 -- PCIe PHY Firmware 固件加载流程】
  • 如何思考一个动态规划问题需要几个状态?
  • [每周一更]-(第150期):AI Agents:从概念到实践的智能体时代
  • net8.0一键创建支持(Elastic)
  • 2025C卷 - 华为OD机试七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD
  • Spring 容器注入时查找 Bean 的完整规则
  • Flutter中 Provider 的基础用法超详细讲解(二)之ChangeNotifierProvider
  • 力扣热题100----------53最大子数组和
  • 咨询进阶——解读40页公司战略解码方法【附全文阅读】
  • sed命令
  • 通信名词解释:I2C、USART、SPI、RS232、RS485、CAN、TCP/IP、SOCKET、modbus
  • 【通识】设计模式
  • catkin_make生成的编译文件夹目录结构说明