9. 编写程序实现求数组最大值,BUF1的最大值放MAX1,BUF2的最大值放MAX2,其中求最大值用子程序实现,参数传递方法不限。使用汇编语言
时间: 2024-02-25 12:53:43 浏览: 20
以下是一个使用汇编语言实现求解BUF1和BUF2最大值的示例代码:
```
.model small
.stack 100h
.data
BUF1 DW 1, 2, 3, 4, 5
BUF2 DW 6, 7, 8, 9, 10
MAX1 DW ?
MAX2 DW ?
.code
main PROC
; 求解BUF1的最大值
mov ax, @data
mov ds, ax
lea bx, BUF1
mov cx, 5
mov ax, [bx]
mov MAX1, ax
loop_start:
add bx, 2
cmp bx, offset BUF1 + 10
jae loop_end
mov ax, [bx]
cmp ax, MAX1
jle loop_start
mov MAX1, ax
jmp loop_start
loop_end:
; 求解BUF2的最大值
lea bx, BUF2
mov cx, 5
mov ax, [bx]
mov MAX2, ax
loop_start2:
add bx, 2
cmp bx, offset BUF2 + 10
jae loop_end2
mov ax, [bx]
cmp ax, MAX2
jle loop_start2
mov MAX2, ax
jmp loop_start2
loop_end2:
; 打印结果
mov ax, MAX1
call print_word
mov ax, MAX2
call print_word
mov ah, 4ch ; 退出程序
int 21h
main ENDP
print_word PROC
; 打印ax寄存器中的16位数值
push ax
push cx
push dx
mov cx, 4
mov dx, 1000h
div dx
add al, 30h
mov dl, al
mov ah, 2
int 21h
mov dx, 100h
div dx
add al, 30h
mov dl, al
mov ah, 2
int 21h
mov dx, 10h
div dx
add al, 30h
mov dl, al
mov ah, 2
int 21h
mov dl, ah
add dl, 30h
mov ah, 2
int 21h
pop dx
pop cx
pop ax
ret
print_word ENDP
END main
```
该程序使用汇编语言实现了求解BUF1和BUF2最大值的功能。首先,我们使用`lea`指令将BUF1的首地址加载到`bx`寄存器中,并将第一个元素的值存储到`MAX1`变量中。然后,我们使用`add`指令将`bx`寄存器中的值逐个增加2,以便访问BUF1中的下一个元素。我们使用`cmp`指令比较当前元素的值和`MAX1`的值,如果当前元素的值更大,则将其存储到`MAX1`中。最后,我们使用`jmp`指令跳转到`loop_start`标签处,以便继续遍历数组中的下一个元素。类似地,我们使用类似的方法计算BUF2的最大值,并将结果存储在`MAX2`变量中。最后,我们使用`print_word`函数打印出结果。