汇编程序成绩排序的实现
作者:迂者-贺利坚
这篇文章主要介绍了汇编程序成绩排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
汇编程序 成绩排序的实现
【任务】
在数据区,给出了学生人数及汇编语言课程的成绩,请将成绩排序并保存在原数据区。
下面给出部分代码,要求完成排序子程序。
程序中给出的数据段,包括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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
