汇编实现简单选择排序的方法示例
<p>上阵子重温数据结构,差不多更新到排序。这学期学了汇编语言,其中有几个实验便是实现内部排序算法。以下是实现简单选择排序的程序设计:</p><div class="jb51code">
<pre class="brush:plain;">
S0 SEGMENT STACK
DW 20 DUP(?)
TOP LABELWORD
S0 ENDS
S1 SEGMENT
TIP DB "Input ten number and separate the numbers with space:", 0DH, 0AH, 24H
ARY DW 20 DUP(0)
CRLFDB 0DH, 0AH, 24H
NDW 0
S1 ENDS
S2 SEGMENT
ASSUME SS:S0, DS:S1, CS:S2, ES:S1
PPROCFAR
MOV AX, S0
MOV SS, AX
LEA SP, TOP
MOV AX, S1
MOV DS, AX
MOV AX, S1
MOV ES, AX
LEA DX, TIP
MOV AH, 9
INT 21H
LEA SI, ARY
XOR DX, DX
MOV BL, 10
MOV CX, 10
INPUT: MOV AH, 1
INT 21H
CMP AL, 20H ;空格分隔字符
JE SAVE
;输入十进制数,将数存入SI对应的内存单元
MOV DL, AL
MOV AX,
MUL BL
SUB DL, 30H
ADD AL, DL
MOV , AX
JMP INPUT
SAVE:
ADD SI, 2
LOOPINPUT
;数组保存完毕
LEA SI, ARY
MOV DI, SI
ADD DI, 2 ;DI位于数组的第二元素的位置
MOV BP, 9 ;SI移动的次数和每一次比较的次数,第一次为9
GO: MOV CX, BP ;每一次比较的循环次数
MOV BX, ;第一个数
CMPA:CMP BX, ;比较后面的数是否比当前的小
JBE CON ;大于就比较下一个
MOV BX, ;将寄存器中的值替换为最小的值
MOV AX, DI ;AX存放最小值的偏移地址
CON:ADD DI, 2
LOOPCMPA
CMP AX, 0 ;如果AX为0,则表示后面的值没有比当前值小
JE NO ;此时SI加一,移动到第二个数 下一次循环比较开始
CHANGE: MOV DX, ;78-83行替换当前值与最小值
PUSHDX
MOV , BX
POP DX
MOV DI, AX
MOV , DX
NO: ADD SI, 2
MOV DI, SI
ADD DI, 2
CALLPRINT
DEC BP ;循环的次数减一
XOR AX, AX ;清除AX的内容,以便76行判断
CMP BP, 1
JNE GO
EXIT:MOV AH, 4CH
INT 21H
PENDP
PRINTPROCNEAR
PUSHSI
PUSHCX
PUSHAX
PUSHDX
LEA DX, CRLF
MOV AH, 9
INT 21H
LEA SI, ARY
MOV CX, 10
L1: MOV AX,
MOV N, AX
CALLOUTPUT
ADD SI, 2
MOV DX, 20H
MOV AH, 2
INT 21H
LOOPL1
POP DX
POP AX
POP CX
POP SI
RET
PRINTENDP
OUTPUT PROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
XOR CX, CX
MOV AX, N
MOV BX, 10
L2: XOR DX, DX
DIV BX
PUSHDX
INC CX
CMP AX, 0
JNE L2
L3: POP DX
ADD DX, 30H
MOV AH, 2
INT 21H
LOOPL3
POP DX
POP CX
POP BX
POP AX
RET
OUTPUT ENDP
S2 ENDS
END P
</pre>
</div>
<p style="text-align: center"><img alt="" src="https://img.jbzj.com/file_images/article/202002/20202495552795.png?2020149567" /></p>
<p>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持琼殿技术社区。</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>汇编实现冒泡排序的方法示例</li><li>汇编语言 输入10个数排序并输出的实现</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]