8086汇编语言程序设计简要记录(三)
一个涉及子程序调用以及将结果输出到显示器的8086汇编程序。利用子程序对数据段NUM0db 11,12,13,14和NUM1db 12,13,14,15对应的各个数进行求和(即对NUM0和NUM1进行求和,对NUM0和NUM1进行求和······),将结果存储于以1000H起始的数据段中,并输出结果。
源程序:
DATA SEGMENT
NUM0 DB 11,12,13,14
NUM1 DB 12,13,14,15
ORG 1000H
SUM DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV CX,4
LEA SI,NUM0 ;取段NUM0的偏移地址
LEA DI,NUM1 ;取段NUM1的偏移地址
L:
MOV BL,
MOV BH,
ADD BH,BL ;两数相加
PUSH SI ;将段NUM0的偏移地址SI压栈,避免与段SUM的偏移地址SI冲突
MOV SUM,BH ;将两数相加的结果写入段SUM
INC SI
POP SI ;将段NUM0的偏移地址SI弹栈
CALL DISPLAY ;调用子程序DISPLAY实现输出功能
INC SI
INC DI
LOOP L
MOV AH,4CH
INT 21H
DISPLAY PROC ;子程序DISPLAY
MOV AL,BH ;将8位的两数相加之和转换为16位并写入AX作被除数
MOV AH,0H
MOV BL,10 ;8位的除数
DIV BL ;SUM/10,取得SUM的十位和个位
PUSH AX ;将商和余数压栈(商被写入AL,余数被写入AH)
MOV DL,AL
ADD DL,30H ;将SUM的十位转换为其ASCII值,使十位能以字符形式输出
MOV AH,2H ;输出结果
INT 21H
POP AX ;将商和余数弹栈
MOV DL,AH
ADD DL,30H ;将SUM的个位转换为其ASCII值,使个位能以字符形式输出
MOV AH,2H ;输出结果
INT 21H
MOV DL,'D' ;输出字符D
MOV AH,2H
INT 21H
MOV DL,10 ;输出“换行”
MOV AH,2H
INT 21H
RET ;子程序返回
DISPLAY ENDP
CODE ENDS
END START
调试结果和运行结果如下:
页:
[1]