永发信息网

请帮我看看这个汇编的小程序行不行

答案:2  悬赏:30  手机版
解决时间 2021-04-23 21:17
  • 提问者网友:咪咪
  • 2021-04-23 07:47

把列出的数从大到小排列,有一个错误,我实在是找不出来了。

DSEG SEGMENT
BUFFER DB 23,12,45,32,127,3,9,58,81,72
N EQU 10
DSEG ENDS

CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV BX,OFFSET BUFFER
MOV SI,1

ABC:
MOV SI,BX+1

A:
MOV AL,[BX]
CMP AL,[BX+SI]
JBE B

XCHG AL,[BX+SI]
MOV [BX],AL

B:
INC SI
CMP SI,N
JBE A

INC BX
CMP BX,N-1
JBE ABC

MOV AH,4CH
INT 21H
CSEG ENDS
END START

最佳答案
  • 五星知识达人网友:北方的南先生
  • 2021-04-23 08:23

DSEG SEGMENT
BUFFER DB 23,12,45,32,127,3,9,58,81,72
;BUFFER DB 2,4,6,8,10,1,3,5,7,9;这组数据更容易明白过程
;N EQU 9
N DW 10 ;这个数是要逐渐减少地
DSEG ENDS


CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG


START: MOV AX,DSEG
MOV DS,AX
MOV BX,OFFSET BUFFER
XOR SI,SI


MOV AL,[BX]
A: CMP AL,[BX+SI]
JB B
MOV DI,SI
MOV AL,[BX+SI]
B: INC SI
CMP SI,N
JB A


;INT 3这个测试点可以看到最小的值
MOV AH,[BX+DI]
MOV AL,[BX]
MOV [BX+DI],AL
MOV [BX],AH


INC BX
XOR SI,SI
MOV AL,[BX+SI]
DEC N
JNZ A


INT 3;此处停下能看到结果。
MOV AH,4CH
INT 21H
CSEG ENDS
END START


这个是选择排序的程序,不知道是否是要的,你原来的代码没看明白到底要什么算法。

全部回答
  • 1楼网友:我住北渡口
  • 2021-04-23 09:21

DSEG SEGMENT BUFFER DB 23,12,45,32,127,3,9,58,81,72 N EQU 10 DSEG ENDS

CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV BX,OFFSET BUFFER MOV SI,1

ABC: MOV SI,BX+1 ;在汇编里是不能直接把bx+1赋值给另一个寄存器的,比如你能够这样做:

;mov dx,bx inc dx mov si,dx 这样既不改变bx也能达到目的。

;我只指出了这个错误,你改过来后再调试下,你这个程序好像还有逻辑错误

;程序能运行,但是不能得到正确结果,请你自己再思考一下

A: MOV AL,[BX] CMP AL,[BX+SI] JBE B

XCHG AL,[BX+SI] MOV [BX],AL

B: INC SI CMP SI,N JBE A

INC BX CMP BX,N-1 JBE ABC

MOV AH,4CH INT 21H CSEG ENDS END START

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯