159 lines
4.0 KiB
Markdown
159 lines
4.0 KiB
Markdown
# 附录一:汇编程序上机过程
|
||
|
||
## 一、实验目的
|
||
|
||
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命令单步执行程序,观察各寄存器和内存的变化情况。 |