汇编语言冒泡排序

终于可以看懂很简单很简单的汇编语言代码了,很有成就感^^

下面是一冒泡排序的汇编语言代码。

先对代码简要说明一下:

像“NEXT0:”,以字符串加冒号构成的是一个标签,翻译成汇编指令时会用偏移地址替代。

原数据放在SOURCE代表的内存单元中,排序后的数据放在RESULT代表的内容单元中。

在冒泡算法中,有两层循环,其中,寄存器BX控制外层循环,CX控制内层循环。

N EQU 4

STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS

DATA SEGMENT
SOURCE DW 7003h,7002h,7008h,7001h
RESULT DW N DUP(0)
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
NEXT0: MOV AX,[SI]
MOV [DI],AX
ADD SI,2
ADD DI,2
LOOP NEXT0
CLD
MOV BX,N-1
MAL1: LEA SI,RESULT
MOV CX,BX
NEXT: LODSW
CMP [SI],AX
JAE CONT
XCHG [SI],AX
MOV [SI-2],AX
CONT: LOOP NEXT
DEC BX
JNZ MAL1
RET
START ENDP
CODE ENDS
END START

这段代码经过link后生成的汇编指令如下:

14C1:0000 1E PUSH DS
14C1:
0001 33C0 XOR AX,AX
14C1:
0003 50 PUSH AX
14C1:
0004 B8C014 MOV AX,14C0
14C1:
0007 8ED8 MOV DS,AX
14C1:
0009 8D360000 LEA SI,[0000]
14C1:000D 8D3E0800 LEA DI,[
0008]
14C1:
0011 B90400 MOV CX,0004
14C1:
0014 8B04 MOV AX,[SI]
14C1:
0016 8905 MOV [DI],AX
14C1:
0018 83C602 ADD SI,+02
14C1:001B 83C702 ADD DI,
+02
14C1:001E E2F4 LOOP
0014
14C1:
0020 FC CLD
14C1:
0021 BB0300 MOV BX,0003
14C1:
0024 8D360800 LEA SI,[0008]
14C1:
0028 8BCB MOV CX,BX
14C1:002A AD LODSW
14C1:002B
3904 CMP [SI],AX
14C1:002D
7305 JNB 0034
14C1:002F
8704 XCHG AX,[SI]
14C1:
0031 8944FE MOV [SI-02],AX
14C1:
0034 E2F4 LOOP 002A
14C1:
0036 4B DEC BX
14C1:
0037 75EB JNZ 0024
14C1:
0039 CB RETF
14C1:003A
0000 ADD [BX+SI],AL
14C1:003C
0000 ADD [BX+SI],AL
14C1:003E
0000 ADD [BX+SI],AL

原文地址:https://www.cnblogs.com/cnbwang/p/1965974.html