主题:[讨论]我编写了一个冒泡法老是出错,帮我改改
yionkjn
[专家分:0] 发布于 2006-11-26 23:25:00
DATA SEGMENT
S DB 12,36,14,25,9,23
X DB 1
FLEG DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN: MOV AX,DATA
MOV CX,DX
LEA SI,S
MOV CX,6
MOV FLEG,0
AGAIN: MOV BX,CX
DEC BX
A: CMP [SI],[SI+1]
JB N1
JNB N2
N1: XCHG [SI],[SI+1]
MOV FLEG,1
CMP BX,0
JZ F1
INC SI
DEC BX
JMP A
N2: CMP BX,0
JZ F1
INC SI
DEC BX
JMP A
F1: CMP FLEG,0
JZ OVER
JNZ OVER1
OVER1: LEA SI,S
ADD SI,SI+1
INC X
MOV FLEG,0
LOOP AGAIN
OVER: MOV DX,OFFSET S
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
[color=FF0000]分别是第1518 35行出错[/color]
回复列表 (共4个回复)
沙发
liangdong007 [专家分:2840] 发布于 2006-11-27 15:11:00
最起码你的DS都没有初始化。好好看看
板凳
huwarren [专家分:0] 发布于 2006-11-27 17:25:00
连汇编框架都不对,能不错吗?
3 楼
书剑一心 [专家分:330] 发布于 2006-11-28 23:03:00
你写的格式几乎不大好,应该出的错误比较多.
我也写了一个冒泡法,输入10个字符能判断大小并输出.运行出来几乎没有问题.一个问题我百思不得其解,怎么结果输入的是12 个字符呢?请达人帮我改改.
data segment
mes1 db 'input the number:$'
buf db 11
db ?
db 11 dup(?)
mes2 db 'the squense is:$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,offset mes1
mov ah,09
int 21h
mov dx,offset buf
mov ah,0ah
int 21h
mov cx,10
mov bx,0
z1: mov si,offset buf+2
add si,bx
call min
mov si,offset buf+2
add si,bx
mov ah,0
l4: cmp al,[si] ;找最小值在整个字符串中的位置位tran做准备
jz l3
inc si
inc ah
jmp l4
l3: call tran
inc bx
loop z1
mov dx,offset mes2
mov ah,9h
int 21h
mov di,offset buf+12
mov byte ptr [di],'$'
mov ah,9h
mov dx,offset buf+2
int 21h
mov ah,4ch
int 21h
min proc ;找到最小的值
push cx
push bx
mov al,[si]
add bx,1
mov cx,10
sub cx,bx
cmp cx,0
jz l7
l1: inc si
cmp al,[si]
jb l2
mov al,[si]
l2: loop l1
l7: pop bx
pop cx
ret
min endp
tran proc ;移动位置,并把最小的值移到第一
push cx
mov cx,0
mov cl,ah
cmp cx,0
jz l6
l5: mov dl,[si-1]
mov [si],dl
dec si
loop l5
l6: mov [si],al
pop cx
ret
tran endp
code ends
end start
4 楼
wp2011 [专家分:130] 发布于 2006-12-01 16:45:00
给你一个正确的,好好看看:
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
BUF DB 20H,11H,25H,49H,0,43H,2H,0FFH
N EQU $-BUF
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV SI,1
L1: MOV DI,SI
INC DI
MOV AL,[BUF+SI-1]
L2: CMP AL,[BUF+DI-1]
JBE NEXT
XCHG [BUF+DI-1],AL
MOV [BUF+SI-1],AL
NEXT: INC DI
CMP DI,N
JBE L2
INC SI
CMP SI,N-1
JBE L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
我来回复