![]() |
#2
Zeamon2010-10-29 18:01
|

N=100
STACK SEGMENT STACK 'STACK'
DW 100 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
SOURCE LABEL BYTE
X=26
REPT 100
X=(X+23)MOD 256
DB X
ENDM
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
;下面给出排序前数据显示程序
LEA DI,SOURCE
MOV DL,[DI]
ADD DI,2
MOV AH,02H
INT 21H
;下面给出排序程序
MOV CX,N
DEC CX
LEA SI,SOURCE ;SI指向数据区首地址
ADD SI,CX ;SI指向数据处理区末地址
LP1: ;外循环开始
PUSH CX
PUSH SI
LP2: ;内循环开始
MOV AL,[SI]
CMP AL,[SI-1]
JB NOXCHG
XCHG AL,[SI-1]
MOV [SI],AL
NOXCHG:
DEC SI
LOOP LP2
POP SI
POP CX
LOOP LP1 ;LOOP循环一次,CX自动减1
;数据排序结束
LEA DI,SOURCE
MOV DL,[DI]
ADD DI,2
MOV AH,02H
INT 21H
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
ory ,应该是程序哪儿有错误,但是我自己确实没找出来,大家帮忙看看 STACK SEGMENT STACK 'STACK'
DW 100 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
SOURCE LABEL BYTE
X=26
REPT 100
X=(X+23)MOD 256
DB X
ENDM
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
;下面给出排序前数据显示程序
LEA DI,SOURCE
MOV DL,[DI]
ADD DI,2
MOV AH,02H
INT 21H
;下面给出排序程序
MOV CX,N
DEC CX
LEA SI,SOURCE ;SI指向数据区首地址
ADD SI,CX ;SI指向数据处理区末地址
LP1: ;外循环开始
PUSH CX
PUSH SI
LP2: ;内循环开始
MOV AL,[SI]
CMP AL,[SI-1]
JB NOXCHG
XCHG AL,[SI-1]
MOV [SI],AL
NOXCHG:
DEC SI
LOOP LP2
POP SI
POP CX
LOOP LP1 ;LOOP循环一次,CX自动减1
;数据排序结束
LEA DI,SOURCE
MOV DL,[DI]
ADD DI,2
MOV AH,02H
INT 21H
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START