汇编程序:成绩排序

【任务】
  在数据区,给出了学生人数及汇编语言课程的成绩,请将成绩排序并保存在原数据区。
  下面给出部分代码,要求完成排序子程序。
  程序中给出的数据段,包括20位同学的成绩,每名同学的数据占1字节。
参考程序段:

assume cs:cseg, ds:dseg, ss:sseg
sseg segment  stack
    dw 100H dup (?)
sseg ends
dseg segment
    db 20
    db 98,61,57,82,89,73,61,58,53,54
    db 84,78,70,64,84,63,76,84,83,86
dseg ends
cseg segment
  start: mov ax, dseg
         mov ds, ax
         mov cl, ds:[0]
         mov ch, 0      ;cx中存储要排序数的个数
         mov bx, 1      ;要排序数的起始偏移地址
         call sort

         mov ax, 4c00h
         int   21h
;子程序名:sort
;功    能:对从(DS):(bx)开始的(cx)个字节排序
;入口参数:(DS):(BX)保存数据的起始地址
;        (cx)中是要排序的数据个数
;出口参数:无
sort proc
     ;这儿写子程序
sort endp

cseg ends
end start

【参考解答】

assume cs:cseg, ds:dseg, ss:sseg
sseg segment  stack
    dw 100H dup (?)
sseg ends
dseg segment
    db 20
    db 98,61,57,82,89,73,61,58,53,54
    db 84,78,70,64,84,63,76,84,83,86
dseg ends
cseg segment
  start: mov ax, dseg
         mov ds, ax
         mov cl, ds:[0]
     mov ch, 0      ;cx中存储要排序数的个数
     mov bx, 1      ;要排序数的起始偏移地址
     call sort

         mov ax, 4c00h
         int   21h

sort proc
         push si
         push ax
         dec cx      ;外层循环次数为数据个数减1
  c1:                ;排序的外层循环
         push cx     
         mov si, bx
  c2:                ;排序的内层循环
         mov al, [si]
         cmp al, [si+1]
         jbe noswap
         mov ah, [si+1]
     mov [si+1], al 
         mov [si], ah 
 noswap: inc si 
         loop c2 
         pop cx
         loop c1

     pop ax
     pop si
     ret
sort endp

cseg ends
end start
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值