好友
阅读权限10
听众
最后登录1970-1-1
|
一个涉及子程序调用以及将结果输出到显示器的8086汇编程序。
利用子程序对数据段NUM0db 11,12,13,14和NUM1db 12,13,14,15对应的各个数进行求和(即对NUM0[0]和NUM1[0]进行求和,对NUM0[1]和NUM1[1]进行求和······),将结果存储于以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,[SI]
MOV BH,[DI]
ADD BH,BL ;两数相加
PUSH SI ;将段NUM0的偏移地址SI压栈,避免与段SUM的偏移地址SI冲突
MOV SUM[SI],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
调试结果和运行结果如下:
|
-
调试结果
-
运行结果
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|