如何用8086汇编语言将45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成数字
时间: 2023-08-31 22:39:31 浏览: 100
### 回答1:
以下是用8086汇编语言将数值输出成数字的示例代码:
```
; 数据段
DATA SEGMENT
NUMS DB 45H, 12H, 23H, 55H, 77H, 33H, 11H, 8AH, 3FH, 1EH
DIGITS DB 10 DUP ('$') ; 存放数字的数组,初始化为 '$'
DATA ENDS
; 代码段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA ; 初始化数据段地址
MOV DS, AX
; 将每个数值转换成数字并存放在 DIGITS 数组中
MOV SI, 0 ; SI 寄存器用于遍历 NUMS 数组
MOV CX, 10 ; CX 寄存器用于循环 10 次(即 NUMS 数组中的元素个数)
MOV DI, OFFSET DIGITS ; DI 寄存器用于遍历 DIGITS 数组
CONVERT:
MOV AL, NUMS[SI] ; 将 NUMS 数组中的元素读入 AL 寄存器
ADD AL, 30H ; 将 ASCII 码值转换成数字
MOV [DI], AL ; 将数字存入 DIGITS 数组
INC SI ; 数组下标加 1
INC DI ; 数组下标加 1
LOOP CONVERT ; 循环 10 次
; 输出 DIGITS 数组中的数字
MOV AH, 09H ; 调用 DOS 中断 21H 的功能号
LEA DX, DIGITS ; 将 DIGITS 数组的地址传入 DX 寄存器
INT 21H ; 调用 DOS 中断
; 程序结束
MOV AH, 4CH ; 调用 DOS 中断 21H 的功能号
INT 21H ; 调用 DOS 中断
CODE ENDS
; 结束语
END START
```
注:以上代码将数字输出到屏幕上,需要在 DOS 环境下运行。如果想要将数字存储到文件或其他介质中,需要使用其他的 DOS 中断。
### 回答2:
要将16进制的数字45H,12H,23H,55H,77H,33H,11H,8AH,3FH,1EH输出成十进制的数字,可以使用8086汇编语言编写以下程序:
```assembly
.model tiny
.stack 100h
.data
hex_values db 45H, 12H, 23H, 55H, 77H, 33H, 11H, 8AH, 3FH, 1EH
decimal_values db 10 dup(?) ; 用于存储转换后的十进制数字
.code
main proc
mov ax, @data
mov ds, ax
mov si, offset hex_values
mov di, offset decimal_values
xor cx, cx ; 初始化计数器
; 把每个16进制的字符转换成对应的十进制数字
convert_loop:
mov al, [si]
inc si
cmp al, 9FH
jbe digit
sub al, 7H ; 大写字母的处理
jmp store
digit:
sub al, 30H ; 数字字符处理
store:
mov [di], al
inc di
inc cx ; 计数器加1
cmp cx, 10 ; 判断是否已经处理完10个字符
jne convert_loop
; 输出十进制数字
mov si, offset decimal_values
xor cx, cx ; 重新初始化计数器
output_loop:
mov dl, [si]
add dl, 30H ; 将数字字符转换成ASCII码字符
mov ah, 2h
int 21h
inc si
inc cx
cmp cx, 10
jne output_loop
mov ax, 4C00h
int 21h
main endp
end main
```
以上程序将会输出10个十进制数字:69, 18, 35, 85, 119, 51, 17, 138, 63, 30。
### 回答3:
要将十六进制数45H, 12H, 23H, 55H, 77H, 33H, 11H, 8AH, 3FH, 1EH转换为数字,可以使用8086汇编语言中的指令来实现。
首先,需要将十六进制数加载到寄存器中。8086中的MOV指令可以用于将数据从内存加载到寄存器中。使用MOV指令将十六进制数加载到寄存器AL中。
接下来,将AL中的寄存器与30H进行逻辑与操作。这是因为当十六进制数小于10H时,只需要保留个位数值,而逻辑与操作可以将其他位数值清零。
然后,判断AL中的寄存器值是否大于9。若大于9,则需要转换为十进制的数字字符。使用ADD指令将AL的值与7H(即字符'0')相加。这样可以将其转换为相应的数字字符。
最后,使用INT 29H中断来实现将字符输出到显示器。INT 29H中断是8086汇编语言中的BIOS中断,用于在显示器上输出字符。需要将AL中寄存器的值放入到AH中,以指示输出为字符。
最后,可以将这一过程通过循环来处理所有的十六进制数。下面是8086汇编语言的示例代码:
```assembly
.model small
.stack 100h
.data
.code
main proc
mov ax, @data
mov ds, ax
mov cx, 10 ; 顶点个数
lea si, numbers ; 存储数字的数组
ConversionLoop:
mov al, [si] ; 加载十六进制数到AL中
and al, 0FH ; 保留个位数字
cmp al, 9 ; 判断是否大于9
jg ConvertToChar
; 转换为数字字符
add al, '0'
jmp Display
ConvertToChar:
; 转换为十进制数字字符
add al, 'A' - 10
Display:
mov ah, 0EH ; 指示输出字符
int 10H ; 中断调用
inc si ; 下一个十六进制数
loop ConversionLoop
mov ah, 4CH
int 21H
main endp
end main
```
此代码将输出十六进制数45H、12H、23H、55H、77H、33H、11H、8AH、3FH和1EH对应的数字。
阅读全文