汇编学习笔记->给定成绩数组排名次

编译环境:emu8086
附:汇编常用跳转指令及其检测位
https://blog.csdn.net/c529283955/article/details/103015482


使用双重循环对给定的学生成绩数组进行排名次

ax 存放当前学生的成绩
bx 存放当前学生在数组中的相对地址指针
cx 内循环计数器
dx 存放当前学生的名次(遍历到一名成绩更高的学生则名次向后+1)
si 在内循环中存放其他学生的相对地址指针
di 外循环计数器


datas segment 
    grade   dw  88,75,95,63,98,78,87,73,90,60
    rank    dw  10 dup(0)
datas ends

codes segment
    assume cs:codes,ds:datas,es:datas
start:
    mov ax,datas            ;标准开局
    mov ds,ax
    mov es,ax
    
    mov di,10               ;外循环计数
    mov bx,0                ;当前学生的相对地址指针置0
outloop:
    mov ax,grade[bx]        ;取出一名学生的成绩到ax中
    mov dx,0                ;将该学生名次置0
    mov cx,10               ;置内循环计数为10,将该学生的成绩与数组中所有成绩都比较一遍,总共10(包括与自身进行比较)
    lea si,grade            ;取得成绩数组的首地址
next:
    cmp ax,[si]             ;注意:此处si保存的是地址,要比较值,所以要[si]
    jg no_count             ;jump when greater,若当前学生的成绩比[si]大,则名次保持不变
    inc dx                  ;否则将名次+1(和自身比较时也会+1,因此置0是必要的)
no_count:                                         
    add si,2                ;向后偏移2个地址(1个字word=2个字节byte),取出下一位学生的成绩与该学生进行比较
    loop next               ;继续比较,此处使用cx作为内循环计数器
    mov rank[bx],dx         ;10次循环过后,已经将该学生的成绩确定,因此将dx中的值(名次)保存到rank数组中的对应位置
    add bx,2                ;开始下一轮比较
    dec di                  ;外循环次数-1
    jne outloop             ;若外循环次数[di]不为0,则继续外循环
    
    mov ah,4ch
    int 21h
codes ends
end start

每一个学生都和数组中的学生比较了10次,10x10=100,复杂度n2 ,还凑合吧
代码虽短,但也应该要想着优化

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值