# 附录一:汇编程序上机过程 ## 一、实验目的 1. 掌握编辑汇编语言源程序的基本方法。 2. 掌握汇编语言源程序的汇编、链接过程。 3. 掌握DOS环境下可执行文件的装载与运行。 4. 学会使用调试工具DEBUG来观察程序执行情况。 ## 二、实验内容 ### 1. 编辑源程序 编辑工作可以用任何一种文本编辑器来完成,例如行编辑器EDLIN(全屏幕编辑器EDIT)、记事本(Notepad)、写字板等。编辑完成后,源文件以`.ASM`为扩展名存储。 下面是一个完整的汇编程序,程序运行时在屏幕上显示字符串"Hello World!"。 ```assembly ;Hello.asm DATAS SEGMENT STRING DB 'Hello World!',0DH,0AH,'$' DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS MAIN PROC FAR MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21H MAIN ENDP CODES ENDS END MAIN ``` **程序说明:** - 伪指令SEGMENT和ENDS用于定义一个段,段名可以是任意合法的标识符。 - 伪指令PROC和ENDP用于定义一个过程,过程名必须是合法的标识符。 - 伪指令ASSUME告诉汇编程序,段寄存器CS、DS、ES、SS分别对应哪个段。 - 程序以END伪指令结束,END后面的标号表示程序执行的起始地址。 ### 2. 汇编源程序 源程序编辑完成后,需要用汇编程序(MASM.EXE)将源程序文件翻译成目标文件(.OBJ)。汇编命令格式为: ``` C:\>MASM 源程序文件名 ``` 例如,对于HELLO.ASM,汇编操作如下: ``` C:\>MASM HELLO.ASM ``` ### 3. 链接程序 汇编后生成的目标文件(.OBJ)需要通过链接程序(LINK.EXE)链接成可执行文件(.EXE)。链接命令格式为: ``` C:\>LINK 目标文件名 ``` 例如: ``` C:\>LINK HELLO.OBJ ``` ### 4. 程序的运行 链接成功后,会生成可执行文件HELLO.EXE。在DOS提示符下键入文件名即可运行: ``` C:\>HELLO ``` ### 5. 调试程序 程序运行如果不能得到预期结果,需要用DEBUG调试工具来跟踪、分析程序执行情况。 进入DEBUG状态: ``` C:\>DEBUG HELLO.EXE ``` 在DEBUG状态下,可以使用各种DEBUG命令进行调试,例如: - R命令:显示和修改寄存器内容 - U命令:反汇编 - T命令:跟踪执行 - G命令:运行程序 ## 三、实验步骤 1. **启动编辑程序**:在DOS环境下,键入EDIT并回车,进入全屏幕编辑环境。 2. **输入源程序**:在编辑环境下输入汇编源程序。 3. **保存源程序**:按Alt+F激活File菜单,选择Save项保存文件,文件名为HELLO.ASM。 4. **退出编辑程序**:按Alt+F激活File菜单,选择Exit项退出编辑环境。 5. **汇编源程序**:在DOS提示符下键入: ``` C:\>MASM HELLO.ASM ``` 屏幕上显示: ``` Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1987. All rights reserved. ``` 然后显示: ``` Warning Severe 0 0 ``` 表示汇编成功,如果没有错误则生成目标文件HELLO.OBJ。 6. **链接目标文件**:在DOS提示符下键入: ``` C:\>LINK HELLO.OBJ ``` 屏幕上显示: ``` IBM Personal Computer Linker Version 2.00 ``` 然后显示: ``` run file [HELLO.EXE]: ``` 直接按回车,接受默认文件名。或者键入其他文件名后回车。链接成功后会生成可执行文件。 7. **运行程序**:在DOS提示符下键入: ``` C:\>HELLO ``` 如果程序正确,则在屏幕上显示: ``` Hello World! C:\>_ ``` 8. **进入DEBUG调试**:如果程序运行不正确,可以进入DEBUG进行调试: ``` C:\>DEBUG HELLO.EXE ``` 在DEBUG提示符"-"下可以输入各种调试命令。 ## 四、思考与练习 1. 为什么汇编语言源程序需要经过汇编和链接才能运行? 2. 如果汇编时出现错误,应如何处理? 3. 使用DEBUG的T命令单步执行程序,观察各寄存器和内存的变化情况。