汇编实验一:DEBUG命令与汇编程序调试

需积分: 10 3 下载量 169 浏览量 更新于2024-09-12 1 收藏 479KB DOC 举报
"汇编实验一" 实验"汇编实验一"主要目的是让学生熟悉和掌握DEBUG工具的使用,包括D、E、R、T、A、G等基本命令,同时了解U、N、W等高级命令。实验内容涵盖汇编语言编程的基础知识,如数据在内存中的存储方式、寻址方式、数据传输、算术运算、逻辑操作以及循环指令的运用。此外,实验还要求学生编写和调试一系列简单的汇编语言程序,如求累加和、多字节加法、数据串移动以及字符串传送指令。 1. **DEBUG命令**: - **D命令**:用于显示内存中的数据,可以观察指令执行后内存的变化。 - **E命令**:用于编辑内存中的数据,可以修改内存单元的内容。 - **R命令**:查看和修改CPU寄存器的值。 - **T命令**:单步执行指令,观察程序运行过程。 - **A命令**:在内存中输入汇编指令。 - **G命令**:从指定地址开始执行程序。 - **U命令**:将机器码转换为汇编指令。 - **N命令**:为内存中的汇编指令分配机器码。 - **W命令**:写入内存,保存修改。 2. **内存操作数和寻址方式**: - **立即寻址**:操作数直接在指令中给出,如`MOV AX, 1234`。 - **直接寻址**:操作数是内存地址,如`MOV [1000], AX`。 - **寄存器寻址**:操作数在寄存器中,如`MOV BX, 1002`。 - **寄存器间接寻址**:通过寄存器访问内存,如`MOV [BX], DL`。 - **变址寻址**:结合寄存器和偏移量访问内存,如`MOV [BX+SI], DL`。 3. **指令应用**: - **数据传送指令**:如`MOV`用于在寄存器、内存和I/O端口之间传递数据。 - **算术运算指令**:如`ADD`、`SUB`、`INC`、`DEC`进行加减运算和增减操作。 - **逻辑指令**:如`AND`、`OR`、`NOT`、`XOR`进行位逻辑运算。 - **循环指令**:如`LOOP`、`JMP`、`jecxz`用于控制循环流程。 4. **实验步骤**: - 学生需要预习DEBUG命令,准备实际操作的例子。 - 使用A命令编写汇编代码,T命令逐条执行,观察结果。 - 利用D命令检查内存内容,分析寻址方式。 - 通过多次运行和调试,理解各种指令的执行效果和内存变化。 实验环境通常包括PC微机、DOS或Windows操作系统,以及汇编编译器如MASM和DEBUG工具。通过这样的实践,学生能深入理解汇编语言编程,提升程序调试技能,为后续更复杂的汇编语言学习打下坚实基础。
2019-05-30 上传
华中科技大学汇编实验 源代码及实验报告 2.1 任务1. 《80X86汇编语言程序设计》教材中 P31的 1.14题。 要求: (1) 直接在TD中输入指令,完成两个数的求和、求差的功能。求和/差后的结果放在(AH)中。 (2) 请事先指出执行指令后(AH)、标志位 SF、OF、CF、ZF的内容。 (3) 记录上机执行后的结果,与(2)中对应的内容比较。 (4)求差运算中,若将A、B视为有符号数,且A>B, 标志位有何特点? 若将A、B视为无符号数,且A>B, 标志位又有何特点? 2.2 任务2. 《80X86汇编语言程序设计》教材中 P45的 2.3题。 要求: (1)分别记录执行到“MOV CX,10”和“INT 21H”之前的(BX), (BP),(SI),(DI)各是多少。 (2)记录程序执行到退出之前数据段开始40个字节的内容,指出程序运行结果是否与设想的一致。 (3)在标号LOPA前加上一段程序,实现新的功能:先显示提示信息“Press any key to begin!”, 然后,在按了一个键之后继续执行LOPA处的程序。 2.3 任务3. 《80X86汇编语言程序设计》教材中 P45的 2.4题的改写。 要求: (1) 实现的功能不变,对数据段中变量访问时所用到的寻址方式中的寄存器改成32位寄存器。 (2) 内存单元中数据的访问采用变址寻址方式。 (3) 记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。 (4)在TD代码窗口中观察并记录机器指令代码在内存中的存放形式,并与TD中提供的反汇编语句及自己编写的源程序语句进行对照,也与任务2做对比。(相似语句记录一条即可,重点理解机器码与汇编语句的对应关系,尤其注意操作数寻址方式的形式)。 (5)观察连续存放的二进制串在反汇编成汇编语言语句时,从不同字节位置开始反汇编,结果怎样?理解 IP/EIP指明指令起始位置的重要性。 2.4 设计实现一个学生成绩查询的程序。 1、实验背景 在以BUF为首址的字节数据存储区中,存放着n个学生的课程成绩表(百分制),每个学生的相关信息包括:姓名(占10个字节,结束符为数值0),语文成绩(1个字节),数学成绩(1个字节),英语成绩(1个字节),平均成绩(1个字节)。 2、功能一:提示并输入待查询成绩的学生姓名 (1)使用9号DOS系统功能调用,提示用户输入学生姓名。 (2)使用10号DOS系统功能调用,输入学生姓名。输入的姓名字符串放在以in_name为首址的存储区中。 (3)若只是输入了回车,则回到“(1)”处重新提示与输入;若仅仅输入字符q,则程序退出,否则,准备进入下一步处理。 3、功能二:以学生姓名查询有无该学生 (1)使用循环程序结构,在成绩表中查找该学生。 (2)若未找到,就提示用户该学生不存在,并回到“功能一(1)”的位置,提示并重新输入姓名。 (3)若找到,则将该学生课程成绩表的起始偏移地址保存到POIN字变量中。 4、功能三:计算所有学生的平均成绩 使用算数运算相关指令计算并保存每一个学生的平均成绩。 平均成绩计算公式:(A*2+B+C/2)/3.5,即将语文成绩A乘以权重2、英语成绩C除以权重2后,与数学成绩B一起求和,再计算该生的平均成绩。要求避免溢出。 5、功能四:将功能二查到的学生的平均成绩进行等级判断,并显示判断结果。 (1)平均成绩等级显示方式:若平均成绩大于等于90分,显示“A”;大于等于80分,显示“B”;大于等于70分,显示“C”;大于等于60分,显示“D”;小于60分,显示“F”。 提示:使用分支程序结构,采用2号DOS系统功能调用显示结果。 (2)使用转移指令回到“功能一(1)”处(提示并输入姓名)