汇编 十个数求其最大值(第二步)

上篇我们讲到如何将内存中的三个数找出来,这篇我们继续将找出来的三个数完成比较,并且把最大的那个数对应的ASCII码输出到屏幕

 

DATA SEGMENT
        DATABASE DB 61H,66H,56H
        DATA_MAX DB 00H
DATA ENDS

CODE SEGMENT
        ASSUME CS:CODE,DS:DATA
START:
        MOV AX,DATA
        MOV DS,AX

        MOV CX,3
        MOV BX,OFFSET DATABASE                                    ;将变量首地址放入BX寄存器
        MOV DL,BYTE PTR DS:[BX]                                        ;初始化DL寄存器为第一个数据
        MOV DATA_MAX,DL                                                     ;初始化最大值为第一个数据
GETMAX:
        MOV DL,BYTE PTR DS:[BX]
        CMP DL,DATA_MAX                                                        ;比较最大数和当前数
        JG TEMP                                                                             ;如果当前数大于前一步的最大数则跳转
SIGN:
        INC BX                                                                                ;地址加一,指向当前数的下一个数
        LOOP GETMAX                                                                ;循环求取最大值
        MOV DL,DATA_MAX
        MOV AH,02H
        INT 21H
        MOV AH,4CH
        INT 21H

TEMP:
        MOV DATA_MAX,DL
        JMP SIGN
CODE ENDS
        END START

 

假设这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
发出的红包

打赏作者

IT蓝月

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值