用汇编语言求一组数的最大值和最小值

首先对10个数按从小到大排序,然后第一个元素就是最小的,最后一个元素就是最大的 
data segment 
mes1 db 'the max:$' 
mes2 db 'the min:$' 
a dw 42,20,100,456,99,120,89,12334,90,1239 
data ends 

code segment 
main proc far 
assume cs:code,ds:data 
start: 
push ds 
sub ax,ax 
push ax 

mov ax,data 
mov ds,ax 
;以下是起泡排序核心代码 
mov cx,10 
dec cx 

loop1: 
mov di,cx 
mov bx,0 
loop2: 
mov ax,a[bx] 
cmp a[bx+2],ax 
jge cotinue 
xchg ax,a[bx+2] 
mov a[bx],ax 

cotinue: 
add bx,2 
loop loop2 
mov cx,di 
loop loop1 

mov dx,offset mes1 
mov ah,09h 
int 21h 
call crlf 
mov bx,a[18] 
call bini ;转换为十进制的子程序 

call crlf ;回车换行子程序 
mov dx,offset mes2 
mov ah,09h 
int 21h 
call crlf 
mov bx,a[0] 
call bini 
ret 
main endp 

bini proc near 
mov cx,10000d 
call bin 
mov cx,1000d 
call bin 
mov cx,100d 
call bin 
mov cx,10d 
call bin 
mov cx,1d 
call bin 
ret 
bini endp 

bin proc near 
mov ax,bx 
mov dx,0 
div cx 
mov bx,dx 
mov dl,al 
add dl,30h 
mov ah,02h 
int 21h 
ret 
bin endp 

crlf proc near 
mov dl,0ah 
mov ah,02h 
int 21h 
mov dl,0dh 
mov ah,02h 
int 21 
ret 
crlf endp 
code ends 
end start
  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设这10个无符号存储在组中,可以按照以下步骤最大值最小值: 1. 将第一个存储在累加器中,作为当前最大值最小值。 2. 依次将组中的其他与当前最大值最小值比较。 3. 如果当前最大值大,将当前存储到累加器中,作为新的最大值。 4. 如果当前最小值小,将当前存储到累加器中,作为新的最小值。 5. 处理完所有后,累加器中的值即为最大值最小值。 下面是一个示例的汇编代码,假设这10个无符号存储在名为 nums 的组中,每个占用1个字节的空间: ``` section .data nums db 10, 7, 24, 15, 2, 6, 9, 17, 3, 12 ; 10个无符号 section .text global _start _start: mov al, byte [nums] ; 将第一个存储到累加器中 mov bl, byte [nums+1] ; 将下一个存储到 bl cmp bl, al ; 比较 bl 和 al ja update_max ; 如果 bl 大于 al,跳转到 update_max jb update_min ; 如果 bl 小于 al,跳转到 update_min jmp next_num ; 如果 bl 等于 al,跳转到 next_num update_max: mov al, bl ; 将 bl 存储到累加器中,作为新的最大值 jmp next_num update_min: mov bl, al ; 将 al 存储到 bl 中,作为新的最小值 jmp next_num next_num: add si, 1 ; 组索引加1 cmp si, 10 ; 比较索引和10 je done ; 如果索引等于10,跳转到 done mov bl, byte [nums+si] ; 将下一个存储到 bl cmp bl, al ; 比较 bl 和 al ja update_max ; 如果 bl 大于 al,跳转到 update_max jb update_min ; 如果 bl 小于 al,跳转到 update_min jmp next_num done: ; 最大值最小值存储在累加器 al 中,可以将它们存储到其他地方,比如内存或寄存器 ; 这里为了方便直接输出最大值最小值 mov dl, al ; 将最大值存储到 dl 中 add dl, '0' ; 转换为 ASCII 码 mov al, 2 ; 系统调用号,表示输出字符 mov bh, 0 ; 表示输出到标准输出 int 0x80 ; 调用系统调用 mov dl, bl ; 将最小值存储到 dl 中 add dl, '0' ; 转换为 ASCII 码 mov al, 2 ; 系统调用号,表示输出字符 mov bh, 0 ; 表示输出到标准输出 int 0x80 ; 调用系统调用 ; 退出程序 mov eax, 1 ; 系统调用号,表示退出程序 xor ebx, ebx ; 返回值 int 0x80 ; 调用系统调用 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值