2017-02-16 24 views
-1

Итак, я только начал изучать 8086 в своем колледже, и я пытаюсь реализовать сортировку пузыря в сборке. Проблема здесь заключается в том, что сравнение 3245 и 2563 приводит к переносу, когда оно не должно, следовательно, значения не меняются.Carry производится, когда это действительно не должно быть? (Сборка 8086)

3245 
- 2563 
______ 
    0CE2 
______ 

Код: -

data segment 
array dw 1535h,3245h,2563h,5632h 
data ends 
code segment 
start: assume cs:code, ds:data 
mov dx,data 
mov ds,dx 
mov bx,0004h 
step1: lea si,array 
mov dx,bx 
dec dx 
mov cx,dx 
jz lbl 
step: mov ax,[si] 
cmp ax,[si+1] 
jc down 
xchg ax,[si+1] 
xchg ax,[si] 
down: add si,2 
loop step 
dec bx 
jnz step1 
lbl: mov ax,4c00h 
int 21h 
code ends 
end start 

Что, кажется, проблема? Прошу прощения за любые ошибки, поскольку я просто пытаюсь выучить концепцию.

+3

Вы уверены, что хотите '[Si + 1]', а не '[си + 2]'? –

+2

Все '[si + 1]' ошибочны, предположительно вы имели в виду '[si + 2]' для получения следующего элемента. Каждое слово - 2 байта. PS: научитесь использовать отладчик. – Jester

+1

Черт побери, я глуп. Спасибо @SamiKuhmonen –

ответ

0

[РЕШЕНО]

Заменить все [Si + 1] с [си + 2]