利用EMU8086编写已知在 DATA 开始的字单元中存放有 10 个无符号整数,试编制程序挑选出其 中的最大值和最小值并显示。
时间: 2024-05-03 09:21:39 浏览: 118
以下是利用EMU8086编写的程序,可以从DATA开始的字单元中挑选出最大值和最小值,并将它们显示出来。
```
; 从 DATA 开始的字单元中挑选最大值和最小值
data segment
numbers db 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
max db ?
min db ?
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
; 初始化 max 和 min
mov max, byte ptr [numbers] ; 从第一个数字开始
mov min, byte ptr [numbers] ; 从第一个数字开始
; 比较数字,更新 max 和 min 的值
mov cl, 9 ; 一共有 10 个数字
mov si, offset numbers + 1 ; 从第二个数字开始
cmp_loop:
mov al, byte ptr [si]
cmp al, max
jg update_max
cmp al, min
jl update_min
inc si ; 指向下一个数字
dec cl ; 循环计数减一
jnz cmp_loop ; 如果还有数字,继续比较
jmp display_result
update_max:
mov max, al ; 更新最大值
jmp cmp_loop
update_min:
mov min, al ; 更新最小值
jmp cmp_loop
; 显示结果
display_result:
mov ah, 09h
mov dx, offset message
int 21h
mov dl, max
add dl, 30h ; 将数字转换为 ASCII 码
mov ah, 02h
int 21h
mov dl, min
add dl, 30h ; 将数字转换为 ASCII 码
int 21h
mov ah, 4ch
int 21h
message db "Max value: ", 0dh, 0ah, "Min value: ", 0dh, 0ah, "$"
code ends
end start
```
这个程序首先将 DS 寄存器设置为 DATA 段的地址,然后初始化 max 和 min 的值为第一个数字的值。
然后程序使用循环比较每一个数字并更新 max 和 min 的值。最后,程序将结果显示在屏幕上。请注意,在将数字转换为 ASCII 码时,我们需要将数字加上 30h,这是因为 ASCII 码中的数字 0 到 9 对应的是十进制数 48 到 57。
输出结果应该为:
```
Max value: 100
Min value: 10
```
阅读全文
相关推荐
















