汇编语言 给出完整代码从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并在屏幕上显示出来。
时间: 2024-02-16 18:00:07 浏览: 147
好的,下面是完整的汇编代码:
```
.MODEL SMALL
.STACK 100H
.DATA
nums DB 10, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
num DB 0 ; 存放最大的二进制数
binary DB 8 DUP(0) ; 存放转换后的二进制数
prompt DB '请输入10个小于256的无符号十进制数:$'
max_msg DB '最大的二进制数为:$'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 显示提示信息
MOV AH, 09H
MOV DX, OFFSET prompt
INT 21H
; 从键盘输入10个十进制数
MOV AH, 0AH
MOV DX, OFFSET nums
MOV AL, 10
INT 21H
; 将输入的十进制数转换为二进制数
MOV BX, OFFSET nums + 1 ; 设置字符串地址
MOV SI, OFFSET binary ; 设置存放二进制数的数组地址
MOV CX, 10 ; 设置循环次数
loop1:
MOV AL, [BX] ; 取出一个十进制数字
AND AL, 0FH ; 将高4位清零
MOV AH, 0 ; 清零
DIV BL ; 将数字除以2
MOV [SI], AH ; 将余数存入数组
INC SI ; 移动数组指针
DEC CX ; 循环次数减1
CMP CX, 0 ; 判断是否还需要继续循环
JNE loop1
; 将转换后的二进制数存入NUM变量中
MOV SI, OFFSET binary ; 设置数组地址
MOV DI, OFFSET num ; 设置NUM变量地址
MOV CX, 10 ; 设置循环次数
loop2:
MOV AL, [SI] ; 取出一个二进制位
SHL AL, CL ; 将它左移
OR BYTE PTR [DI], AL ; 将结果存入NUM变量中
INC SI ; 移动数组指针
DEC CX ; 循环次数减1
CMP CX, 0 ; 判断是否还需要继续循环
JNE loop2
; 找出最大的二进制数并在屏幕上显示出来
MOV CL, 8 ; 设置循环次数
MOV AL, [num] ; 取出第一个字节
MOV BL, AL ; 设置最大值为当前值
loop3:
SHR AL, 1 ; 将当前值右移一位
JB skip ; 如果最低位为1,则跳过
MOV BL, AL ; 更新最大值
skip:
DEC CL ; 循环次数减1
CMP CL, 0 ; 判断是否还需要继续循环
JNE loop3
MOV AH, 09H ; 显示提示信息
MOV DX, OFFSET max_msg
INT 21H
MOV AH, 02H ; 显示最大二进制数
MOV DL, BL
ADD DL, '0'
INT 21H
MOV AH, 4CH ; 退出程序
INT 21H
MAIN ENDP
END MAIN
```
希望我的回答能够帮到你!
阅读全文