一、实验目的 1、学习子程序(过程)的定义和调用方法。 2、学习$、OFFSET等伪指令。 3、进一步学习程序执行的流程。 二、实验内容 设有一数据区有10个有符号数的字节数据(如55,78H,43,-19,0,1,10,80H,0FFH,100),位于数据段偏移地址为1000H开始的10个内存单元中。编写程序找出其中的最大数和最小数,分别存入BH和BL;然后求其中最大值和最小值的平均值,存入AL。 要求:将求最大最小值设计为子程序,并画出子程序流程图;在主程序里调用该子程序、求平均值,并绘制主程序流程图。
时间: 2023-11-27 14:50:37 浏览: 73
MOV ALBN ;取产品编号-微处理器80x86第4章
以下是汇编语言实验的代码和流程图。
代码:
```
assume cs:code, ds:data
data segment
arr db 55h, 78h, 43h, -19, 0, 1, 10, 80h, 0FFh, 100
data ends
code segment
start:
mov ax, data
mov ds, ax
call find_max_min
mov bh, byte ptr max
mov bl, byte ptr min
add bh, bl
mov al, bh
mov ah, 0
mov cl, 2
div cl
mov ax, 4c00h
int 21h
find_max_min proc
mov si, offset arr
mov al, [si]
mov max, al
mov min, al
inc si
mov cx, 9
loop_start:
mov al, [si]
cmp al, max
jg update_max
cmp al, min
jl update_min
inc si
loop loop_start
ret
update_max:
mov max, al
jmp common_update
update_min:
mov min, al
common_update:
inc si
loop loop_start
find_max_min endp
code ends
```
流程图:
```
start
|
|__mov ax, data
| mov ds, ax
| call find_max_min
| mov bh, byte ptr max
| mov bl, byte ptr min
| add bh, bl
| mov al, bh
| mov ah, 0
| mov cl, 2
| div cl
| mov ax, 4c00h
| int 21h
|
|__find_max_min
|
|__mov si, offset arr
| mov al, [si]
| mov max, al
| mov min, al
| inc si
|
|__mov cx, 9
|__loop_start:
|
|__mov al, [si]
| cmp al, max
| jg update_max
| cmp al, min
| jl update_min
|
|__inc si
|__loop loop_start
|
|__update_max:
|
|__mov max, al
|__jmp common_update
|
|__update_min:
|
|__mov min, al
|
|__common_update:
|
|__inc si
|__loop loop_start
```
阅读全文