文档介绍:汇编语言程序设计
Ch. 5 汇编语言程序设计
汇编源程序的编程格式
DOS系统I/O功能调用
BIOS键盘输入功能调用
数值计算和数据处理
.486
DATA SEGMENT USE16
MESG DB ‘A‘,0DH,0AH,'$'
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX DS初值;以上设置
┇
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END BEG ;汇编结束语句
例: 将N1和N2两个单字节数以28为模求和→SUM单元.
汇编源程序的编程格式
1. EXE文件编程格式
允许源程序使用多个逻辑段,适合编写大型程序,.
. 486
DATA SEGMENT USE16
N1 DB x x
N2 DB x x
SUM DB ?
DATA ENDS
STACK_ SEGMENT STACK ‘STACK’ USE16
DB 128 DUP (?)
STACK_ ENDS
BEG: MOV AX, DATA
MOV DS, AX
MOV AX,STACK_
MOV SS, AX
MOV SP, 128
MOV AL,N1
ADD AL,N2
MOV SUM, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END BEG
可省
CODE SEGMENT USE16
ASSUME CS:CODE, DS:DATA ,SS:STACK_
说明: . EXE文件中堆栈段的设置
a 本例以“STACK_”为段名的逻辑段,选用了“STACK”链接参数,DOS自动认为“ STACK_”段为堆栈段。所以, DOS将自动给SS:SP赋初值, 因此,源程序给SS:SP赋初值的三条语句是多余的。
b 链接程序要求: . EXE文件中的源程序必须有堆栈段, 否则链接时将给出警告信息:
Warning no stack segment
但这不代表源程序有错,仅仅是警告而已
c 如果源程序中不设置堆栈段(在链接时,会给出错误
信息), DOS将自动给程序分配最少128 字节的堆栈
区,故源程序中,如果没有大量数据压栈的话,可以不
设置堆栈段,从而简化程序。
. 486
DATA SEGMENT USE16
N1 DB x x
N2 DB x x
SUM DB ?
DATA ENDS
STACK_ SEGMENT STACK ‘STACK’ USE16
DB 128 DUP (?)
STACK _ ENDS
CODE SEGMENT USE16
ASSUME CS:CODE, DS:DATA ,SS:STACK_
BEG: MOV AX, DATA
MOV DS, AX
MOV AX,STACK_
MOV SS, AX
MOV SP, 128
MOV AL,N1
ADD AL,N2
MOV SUM, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END BEG
2 . COM文件的编程格式
(1) 汇编语言规定:
COM文件的源程序只能有一个段: 代码段, 不允许
有堆栈段;
在代码段偏移地址=100H处, 必须是程序的启动指令;
程序中使用的数据可以放在代码段的开始或结尾.
. 486 . 486
CODE SEGMENT USE16 CODE SEGMENT USE16
ASSUME CS: CODE ASSUME CS: CODE
ORG 100H
BEG: JMP START BEG: MOV AL, N1
N1 DB XX ADD AL, N2
N2 DB XX MOV SUM, AL
SUM DB ? MOV AH, 4CH
START: MOV AL, N1 INT 21H
ADD AL, N2 N1 DB XX
MOV SUM, AL N2 DB XX
MOV AH, 4CH SUM DB ?
INT 21H CODE ENDS
CODE ENDS END BEG
END BEG
(2) 格式源程序
(3) COM文件的生成
设上例的文件名为 N1ADDN2. ASM
编辑生成 N1ADDN2. ASM
调用 TASM. EXE 生成 N