버블 정렬 기능을 어셈블리 8086에서 수행하려고하지만 어떤 이유로 밉스가 잘못된 대답을하고 이유를 찾을 수 없습니다.어셈블리에서 버블 정렬 방법 8086
우리는 아직 배울 수 없기 때문에 .code, .data 및 그 중 어떤 것도 사용할 수 없으며 사용법을 모르겠습니다.
제가 사용한 스왑 기능은 제가 아는 한 작동합니다. '$'기호
org 100h
jmp main
string db 'm', 'a', 'g', 's', 'h', 'i', 'm', 'i', 'm', 'v', 'e', 'n', 'e', 'h', 'e', 'n', 'i', 'm' ,0Dh,0Ah,'$'
main:
lea di,string
push di
call bubbleSort
mov ax, 0
mov ah, 0
int 16h
ret
swap proc
push bp
mov bp, sp
mov bx, [bp + 4]
mov al, [bx]
mov di, [bp + 6]
mov cl, [di]
mov [di], al
mov [bx], cl
mov sp, bp
pop bp
retn 4
swap endp
bubbleSort proc
push bp
mov bp, sp
mov si, [bp + 4]
mov cx, 18
outer_loop:
mov si, [bp + 4]
lea di, [si + 2]
mov bx, cx
mov cx, 18
inner_loop:
cmp si, di
ja finish:
;swap
pusha
push si
push di
call swap
popa
finish:
inc si
inc di
loop inner_loop
mov cx, bx
loop outer_loop
mov sp, bp
pop bp
retn 2
bubbleSort endp
이 좋아, 당신은 내가 내 실수의 일부를 understude이 코드에 대해 어떻게 생각하십니까 (편집 한), 코드는 지금 작동하지만 난 (터치)를 이동 생각
bubbleSort proc
push bp
mov bp, sp
mov si, [bp + 4]
mov cx, 18
outer_loop:
mov si, [bp + 4]
mov bx, cx
mov cx, 18
inner_loop:
mov al, [si]
mov ah, 0h
mov dl, [si + 1]
mov dh, 0h
cmp dl, al
ja finish:
;swap
mov [si + 1], al
mov [si], dl
finish:
inc si
loop inner_loop
mov cx, bx
loop outer_loop
mov sp, bp
pop bp
retn 2
bubbleSort endp
잘못 답변을 제공하는 이유
"작동하지 않습니다"무엇이 잘못 되었나요? [mcve]를 참조하십시오. 그것은 추락합니까? 그것은 잘못된 대답을 주는가? 디버거를 사용하여 레지스터 값이 예상 한 값인지 확인하십시오. 또한'swap'을 별도의 함수에 넣으면 코드가 훨씬 복잡해집니다. –
적어도 하나의 문제가 있음을 알 수 있습니다 : 그들이 가리키는 데이터 대신에'si'와'di'를 비교합니다. –
8 비트 요소의 경우 [8086 버블 정렬 구현] (https://stackoverflow.com/questions/26318043/assembly-bubble-sort-for-sorting-string/26324630#26324630). –