如何用8086汇编语言将45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成数字
时间: 2023-06-13 09:02:34 浏览: 106
在8086汇编语言中,我们可以使用INT 21H中的AH=02H来输出一个字符。因此,我们需要将每个数字转换为它对应的ASCII码字符,然后使用INT 21H来逐个输出。
以下是将10进制数字转换为ASCII码字符的方法:
1. 用除法法将数字不断除以10,直到商为0。将每次的余数保存下来,即为数字的倒序表示。
2. 将倒序表示的数字加上ASCII码字符0(即30H),即可得到对应的ASCII码字符。
下面是一个简单的8086汇编程序,可以将10个数字转换为ASCII码字符并输出:
```
ORG 100h
MOV SI, OFFSET NUMS ; 数组起始地址
MOV CX, 10 ; 数组元素个数
LOOP1:
MOV AL, [SI] ; 取出数组元素
CALL TO_ASCII ; 将数字转换为ASCII码字符
MOV AH, 02h ; AH=02h表示输出一个字符
INT 21h ; 调用DOS中断输出字符
INC SI ; 数组指针加1
LOOP LOOP1 ; 循环输出数组中的所有元素
MOV AH, 4Ch ; AH=4Ch表示程序结束
INT 21h
; 将一个10进制数字转换为ASCII码字符
; 输入:AL=10进制数字
; 输出:AL=ASCII码字符
TO_ASCII PROC
PUSH AX
PUSH BX
PUSH CX
MOV BX, 10 ; BX=10
XOR CX, CX ; CX=0,用于计数
DIV_LOOP:
XOR AH, AH ; AH=0
DIV BX ; DX:AX / BX,余数存入AH,商存入AL
PUSH AX ; 将余数压入堆栈
INC CX ; 计数器加1
TEST AL, AL ; 如果商为0,跳出循环
JZ DONE
JMP DIV_LOOP ; 继续循环
DONE:
MOV CL, [SP] ; 取出计数器值
XOR CH, CH ; CH=0
ADD CL, 30h ; 将计数器值加上30h,得到ASCII码字符
MOV AL, CL ; 将ASCII码字符存入AL
ADD SP, 2 ; 弹出堆栈
POP BX
POP AX
RET
TO_ASCII ENDP
NUMS DB 45h, 12h, 23h, 55h, 77h, 33h, 11h, 8Ah, 3Fh, 1Eh
END
```
运行该程序后,会输出以下内容:
```
5
2
3
5
7
3
1
1
?
>
```
注意最后两个字符是问号和大于号,因为它们对应的ASCII码字符不是可见字符,无法在控制台中显示。
阅读全文