懂得汇编语言的大虾来看看怎么回事啊~~~疯了

来源:百度知道 编辑:UC知道 时间:2024/05/12 07:10:38
DATA SEGMENT
A DW 80
B DW 78
C DW 77
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AX,A
CMP AX,B
JA CHANGE1

CHANGE1: XCHG AX,B
MOV A,AX

COMPARE: MOV AX,C
CMP B,AX
JA CHANGE2

CHANGE2: XCHG AX,Ba
MOV C,AX
RET

MAIN ENDP
CODE ENDS
END START
随便三个正整数假设是80、78、77放在三个内存单元A、B、C中,用汇编将该三个数按递增顺序存放
我的思路是:先A,B比较,如果A>B则AB交换,这时A<B了,再用B和C比较,同样如果B>C则BC交换,这样B<C了,结果就是A<B<C的递增排序

但是我按这个思路下来,报错!!!调不出来

你的思路有误
应该是:先A,B比较,如果A>B则A、B交换,这时A<B了;再用A和C比较,同样如果A>C则A、C交换,这样A<C了,此时A中是最小的数;最后B和C比较,同样如果B>C则B、C交换,这样B<C了,结果就是A<B<C的递增排序。
调试好的代码如下:
DATA SEGMENT
A DW 80
B DW 78
C DW 77
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AX,A
CMP AX,B
JNB NEXT1
XCHG AX,B
MOV A,AX
NEXT1:
MOV AX,A
CMP AX,C
JNB NEXT2
XCHG AX,C
MOV A,AX
NEXT2:
MOV AX,B
CMP AX,C
JNB NEXT3
XCHG AX,C
MOV B,AX
NEXT3:
RET
MAIN ENDP
CODE ENDS
END START

程序好像是对的,只是你的三个数不用这么麻烦吧!直接这样
NUM DW 80,78,77然后用DI来传送它们的值!试试看!

思路有点问题,在C和B比较后,如果C<B 的话,C还要和A进行比较