汇编程序清单的写法通常包括以下几个部分:
定义数据段(DATA Segment)
定义被乘数、乘数、乘积存放位置等数据。
示例:
```assembly
DATA SEGMENT
DATA1 DB 32H, 39H, 30H, 35H, 34H ; 定义被乘数 45092
DATA2 DB 33H ; 定义乘数 3
RESULT DB 6 DUP(00H) ; 定义乘积存放位置
DATA ENDS
```
定义堆栈段(STACK Segment)
定义堆栈空间的大小。
示例:
```assembly
STACK SEGMENT
STA DB 20 DUP(?) ; 从STA开始留出20个单元作为堆栈空间
TOP EQU LENGTH STA ; 定义代码段
STACK ENDS
```
定义代码段(CODE Segment)
指定各段的逻辑地址。
示例:
```assembly
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATA
```
程序入口点(START)
初始化数据段、堆栈段和堆栈指针。
示例:
```assembly
START:
MOV AX, DATA
MOV DS, AX
MOV AX, STACK
MOV SS, AX
MOV AX, TOP
MOV SP, AX
```
主程序逻辑
实现具体的算法或功能。
示例(计算两个数的乘积):
```assembly
MOV SI, OFFSET DATA2 ; 取乘数
MOV BL,[SI] ; 乘数送到BL中
AND BL, 00001111B ; 将ASCII转换为16进制数
MOV SI, OFFSET DATA1 ; 取被乘数的偏移地址
MOV DI, OFFSET RESULT ; 取乘积存放的偏移地址
MOV CX, 05 ; 乘5次
LOOP1:
MOV AL,[SI] ; 取被乘数送到AL
AND AL, 00001111B ; 被乘数ASCII转换为16进制数
INC SI ; 指向下一个被乘数字节(高位)
MUL BL ; 乘法指令AL*BL,乘积送到AX
AAM ; 法调整,AH-AL/10所得的余数
ADD AL,[DI] ; 积低位加部分积
```
结束程序
结束程序并返回操作系统。
示例:
```assembly
MOV AH, 4CH
INT 21H
```
完整的汇编程序清单示例: