设有一数据区有10个无符号数的字节数据(如55,78H,43,19,0,1,10,80H,0FFH,100),位于数据段偏移地址为1000H开始的10个内存单元中。编写程序找出其中的最大数和最小数,分别存入BH和BL;然后求其中最大值和最小值的平均值,存入AL。 要求:将求最大最小值设计为子程序,并画出子程序流程图;在主程序里调用该子程序、求平均值,并绘制主程序流程图。
时间: 2023-11-28 12:47:20 浏览: 138
78H05的应用数据手册及参考电路
首先,我们需要设计一个子程序来找出其中的最大值和最小值。下面是该子程序的流程图:
<img src="https://img-blog.csdn.net/20180526202603333?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thcm5pbmdfMjAxOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="500">
其中,用寄存器AL存储最小值,用寄存器BL存储最大值。
接下来,我们可以编写主程序,在其中调用该子程序,并求出最大值和最小值的平均值。下面是主程序的流程图:
<img src="https://img-blog.csdn.net/20180526202627511?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thcm5pbmdfMjAxOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80" width="500">
其中,用寄存器AH存储最大值和最小值的平均值。
下面是完整的汇编代码:
```assembly
assume cs:code, ds:data
data segment
arr db 55,78H,43,19,0,1,10,80H,0FFH,100
data ends
code segment
start:
mov ax, data
mov ds, ax
; 调用子程序求最大值和最小值
call find_min_max
; 求平均值
mov ah, 0
add al, bl
adc ah, 0
add al, bh
adc ah, 0
mov bx, 2
div bx
; 结束程序
mov ah, 4ch
int 21h
find_min_max proc
; 初始化最小值为255,最大值为0
mov al, 255
mov bl, 0
; 循环比较每个数
mov cx, 10
lea si, arr
cmp_loop:
mov dl, [si]
cmp dl, bl
jg max_update
cmp dl, al
jl min_update
jmp next
max_update:
mov bl, dl
jmp next
min_update:
mov al, dl
next:
inc si
loop cmp_loop
ret
find_min_max endp
code ends
end start
```
阅读全文