当前位置: 首页 > 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.lryc.cn/news/601765.html

相关文章:

  • 基于黑马教程——微服务架构解析(一)
  • C/C++核心知识点详解
  • lombok插件@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor的区别
  • 金融科技中的跨境支付、Open API、数字产品服务开发、变革管理
  • 2025C卷 - 华为OD机试七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD
  • SpringSecurity实战:核心配置技巧
  • 由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
  • Python堆栈实现:从基础到高并发系统的核心技术
  • 模拟实现python的sklearn库中的Bunch类以及 load_iris 功能
  • 20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音
  • 两个函数的卷积
  • Node.js特训专栏-配置与环境部署:20.PM2进程守护与负载均衡
  • 以使命为帆,结业是重新出发的号角
  • 电科金仓 KingbaseES 深度解码:技术突破・行业实践・沙龙邀约 -- 融合数据库的变革之力
  • 从0开始学linux韦东山教程Linux驱动入门实验班(6)
  • c# everthing.exe 通信
  • Android基础(一) 运行HelloWorld
  • 【java】 IntelliJ IDEA高效编程设置指南
  • 大模型算法面试笔记——常用优化器SGD,Momentum,Adagrad,RMSProp,Adam
  • Java 代理机制详解:从静态代理到动态代理,彻底掌握代理模式的原理与实战
  • 雪花算法原理深度解析
  • 【0基础PS】PS工具详解--选择工具--快速选择工具
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——5.4 计算预订订单数量和总金额 (Calculating booked orders)
  • 使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色
  • Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)
  • 高格办公空间:以 “空间为基,服务为翼”,重塑办公场景生态
  • 【语义分割】记录2:yolo系列
  • libomxil-bellagio移植到OpenHarmony
  • java小白闯关记第一天(两个数相加)