![]() |
#2
zklhp2011-11-10 18:42
|
但采用UltraEdit编译就木有结果.这是什么问题?
P.S.原来是一百个(此时CX=100)数据,为了阅读方便我改成10个了.
话说emu8086虽然调试极为方便但速度太慢了,100个数据整了近10分钟才出结果.这是唯一让人人郁闷的地方╮(╯_╰)╭

DATAS SEGMENT ;以下源程序实现下列100个数据由大到小的排列
ARRAY DW 259FH,1923H,3241H,1000H,5BC7H,1CF2H,0FFFFH,1DADH,9ADFH,4E17H
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV CX,10 ;求实际循环次数,CX作为里层循环计算器
DEC CX
LP1: MOV DX,CX ;DX赋初值作为外层循环计数器
MOV SI,0H ;SI作为数据指针置0
LP2: MOV AX, [ ARRAY+SI ] ;取第一个数给AX
CMP AX,[ARRAY+SI+2] ;与下一个数比较
JNB LP3 ;AX大于或等于第二个数则转跳
XCHG AX,[ARRAY+SI+2];若小于则互换,大的数放低字节
MOV [ ARRAY+SI ],AX ;小的数放高字节
LP3: ADD SI,2 ;SI加2,指向下一个数
DEC DX ;修改外循环次数
JNZ LP2 ;如果DX不等于0,则跳转至LP2
LOOP LP1
MOV AX,4C00H
INT 21H
CODES ENDS
END START
ARRAY DW 259FH,1923H,3241H,1000H,5BC7H,1CF2H,0FFFFH,1DADH,9ADFH,4E17H
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV CX,10 ;求实际循环次数,CX作为里层循环计算器
DEC CX
LP1: MOV DX,CX ;DX赋初值作为外层循环计数器
MOV SI,0H ;SI作为数据指针置0
LP2: MOV AX, [ ARRAY+SI ] ;取第一个数给AX
CMP AX,[ARRAY+SI+2] ;与下一个数比较
JNB LP3 ;AX大于或等于第二个数则转跳
XCHG AX,[ARRAY+SI+2];若小于则互换,大的数放低字节
MOV [ ARRAY+SI ],AX ;小的数放高字节
LP3: ADD SI,2 ;SI加2,指向下一个数
DEC DX ;修改外循环次数
JNZ LP2 ;如果DX不等于0,则跳转至LP2
LOOP LP1
MOV AX,4C00H
INT 21H
CODES ENDS
END START
[ 本帖最后由 sudosu 于 2012-12-5 13:22 编辑 ]