飞翔梧桐 發表於 2020-2-4 09:58:50

汇编实现直接插入排序的方法示例

<p>上一篇实现了简单插入排序的算法,这一篇主要实现直接插入排序算法:</p>
<div class="jb51code">
<pre class="brush:plain;">
S0 SEGMENT STACK
DW 20 DUP(&#63;)
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
EDW 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
PUSHDX
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
SUB SI, 2
MOV E, SI;E用于存放数组的前一个地址,用来判断遍历结束
ADD SI, 2

XOR AX, AX ;AX用来存插入元素的地址
MOV CX, 9;总循环次数

GO: MOV BX,
PUSHSI ;第一个数的位置压栈
CMPA:CMP BX,
JA SEL
;小于就把AX的值存放当前要插入的位置
MOV AX, SI
SUB SI, 2
CMP SI, E
JNE CMPA
SEL:CMP AX, 0;判断AX是否又被修改过,没有说明当前数比前面的数大
JE CON

POP SI ;取出第一个数字的位置
;从AX到SI这一段的所有数字往后移动一个位置
CHANGE: MOV DX,
XCHGDX,
;当SI表示的位置在AX前面了,说明移动完成
MOV BP, SI
SUB SI, 2
CMP AX, BP
JNE CHANGE

MOV SI, AX
MOV , BX
CON:ADD DI, 2;继续下一次
MOV SI, DI
SUB SI, 2
XOR AX, AX ;同时需要清空AX
CALLPRINT
LOOPGO


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 src="https://img.jbzj.com/file_images/article/202002/20202495822617.png?20201495843" alt="" /></p>
<p>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持琼殿技术社区。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>汇编实现简单选择排序的方法示例</li><li>汇编实现冒泡排序的方法示例</li><li>汇编语言 输入10个数排序并输出的实现</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 汇编实现直接插入排序的方法示例