3、从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并在屏幕上显示出来。写一个汇编代码
时间: 2024-02-16 07:00:11 浏览: 23
以下是汇编代码实现:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
NUM DB 10 DUP(?) ; 存放二进制数的数组
MAX DB 0 ; 最大数的二进制表示
MAX_DEC DB 0 ; 最大数的十进制表示
MSG DB 'The maximum number is: $'
.CODE
MAIN PROC
; 初始化
MOV AX, @DATA
MOV DS, AX
; 读入十进制数并转换为二进制
MOV CX, 10 ; 循环10次
MOV SI, 0 ; 数组下标
READ:
; 读入一个十进制数
MOV AH, 01H ; 读入字符
INT 21H ; 调用dos中断
SUB AL, '0' ; 将字符转换为数字
MOV [NUM+SI], AL ; 存放到数组中
; 转换为二进制数
MOV BL, AL ; 保存原始值
MOV AL, 0 ; 清零
MOV CX, 8 ; 循环8次
CONVERT:
SHL BL, 1 ; 左移一位
RCL AL, 1 ; AL的右侧填充BL的最高位
LOOP CONVERT ; 循环
; 存放到数组中
MOV [NUM+SI], AL
INC SI ; 数组下标加1
LOOP READ
; 找出最大数
MOV CX, 10 ; 循环10次
MOV SI, 0 ; 数组下标
MOV AL, [NUM] ; 初始化为第一个数
FIND_MAX:
CMP AL, [NUM+SI] ; 比较
JBE NOT_MAX ; 如果不是最大数则跳过
MOV AL, [NUM+SI] ; 更新最大数
MOV MAX, AL ; 存放最大数的二进制表示
MOV MAX_DEC, SI ; 存放最大数的十进制表示
NOT_MAX:
INC SI ; 数组下标加1
LOOP FIND_MAX
; 显示最大数
MOV AH, 09H ; 显示字符串
LEA DX, MSG ; 装载字符串地址
INT 21H ; 调用dos中断
MOV DL, MAX_DEC ; 显示最大数的十进制表示
ADD DL, '0' ; 转换为字符
MOV AH, 02H ; 显示字符
INT 21H ; 调用dos中断
MOV DL, ':' ; 显示冒号
MOV AH, 02H ; 显示字符
INT 21H ; 调用dos中断
MOV DL, MAX ; 显示最大数的二进制表示
ADD DL, '0' ; 转换为字符
MOV AH, 02H ; 显示字符
INT 21H ; 调用dos中断
; 程序结束
MOV AH, 4CH ; 返回dos
INT 21H ; 调用dos中断
MAIN ENDP
END MAIN
```