•写一个完整的80X86汇编语言程序:键盘输入15个数据(转换成数值,存储到一维数组中,数值的长度为字),找出最小的偶数并在屏幕上显示,若没有偶数则显示“没有偶数!”。
时间: 2024-05-10 18:14:22 浏览: 171
以下是一个简单的80X86汇编语言程序,实现键盘输入15个数据(转换成数值,存储到一维数组中,数值的长度为字),找出最小的偶数并在屏幕上显示,若没有偶数则显示“没有偶数!”。
```
.model small
.stack 100h
.data
input_msg db '请输入第$个数字:$'
output_msg db '最小的偶数为:$', 13, 10, '$'
no_even_msg db '没有偶数!', 13, 10, '$'
input_arr dw 15 dup(0)
min_even dw 32767
.code
main proc
mov ax, @data
mov ds, ax
; 输入15个数据
mov cx, 15
mov di, 0
mov si, offset input_arr
input_loop:
push cx ; 保存cx寄存器的值
mov ah, 09h ; 显示“请输入第x个数字:”
mov dx, offset input_msg
mov bl, 0
mov bh, 0
inc di ; 计数器加1
mov al, di ; 将计数器的值转换为数字
call print_num ; 调用打印数字的函数
pop cx ; 恢复cx寄存器的值
mov ah, 01h ; 读取键盘输入
int 21h
sub al, 30h ; 将输入的字符转换为数字
mov [si], ax ; 将数字存储到数组中
add si, 2 ; 数组索引加2
loop input_loop
; 找出最小的偶数
mov cx, 15
mov si, offset input_arr
find_min_even:
mov ax, [si]
test ax, 1 ; 判断是否为偶数
jnz not_even
cmp ax, [min_even]
jge not_min_even
mov [min_even], ax
not_min_even:
add si, 2
loop find_min_even
cmp [min_even], 32767 ; 判断是否找到偶数
je no_even
; 显示最小的偶数
mov ah, 09h
mov dx, offset output_msg
int 21h
mov ax, [min_even]
call print_num
jmp exit
no_even:
; 显示“没有偶数!”
mov ah, 09h
mov dx, offset no_even_msg
int 21h
exit:
mov ah, 4ch
int 21h
main endp
; 打印数字的函数
print_num proc
push ax ; 保存ax寄存器的值
push bx ; 保存bx寄存器的值
push cx ; 保存cx寄存器的值
push dx ; 保存dx寄存器的值
mov bx, 10 ; 将要除的数
mov cx, 0 ; 计数器清零
loop_print:
xor dx, dx ; 清除dx寄存器的值
div bx ; 将ax寄存器的值除以bx,商保存在ax中,余数保存在dx中
push dx ; 保存余数
inc cx ; 计数器加1
test ax, ax ; 判断ax寄存器的值是否为0
jnz loop_print ; 不为0则继续循环
print_loop:
pop dx ; 弹出余数
add dl, 30h ; 将余数转换为ASCII码
mov ah, 02h ; 显示字符
int 21h
loop print_loop ; 循环显示余数
mov dl, '$' ; 显示结束符
mov ah, 02h ; 显示字符
int 21h
pop dx ; 恢复dx寄存器的值
pop cx ; 恢复cx寄存器的值
pop bx ; 恢复bx寄存器的值
pop ax ; 恢复ax寄存器的值
ret
print_num endp
end main
```
阅读全文