2017-01-04 2 views
-1

Вот мой код:x86 реальный режим: перенос данных из одного массива в другой

data segment 
gio db 1,2,3,4,5,6 
ricxvi db 1 
jami db 0 
x db ? 
ends 

stack segment 
    db 128 dup(0) 
ends 

code segment 
start: 
MOV AX,DATA 
MOV DS,AX 


    mov cx, 6 
    lea si, gio 
    mov ah, 0 


    n1: 
    mov al, [si] 
    cmp ricxvi, 3 
    je n2 
    jmp n3 

    n2: 
    add jami, al 
    mov ricxvi, 1 
    jmp n4 

    n3: 
    add ricxvi, 1 
    push ax 

    n4: 
    add si, 1 
    add di, 1 
    loop n1 




    mov ricxvi, 1 
    mov ax, 0 
    mov cx, 6 
    lea si, gio  


    n5: 
    cmp ricxvi, 3 
    je n6 
    jmp n7 


    n6: 
    mov ricxvi, 1 
    add si, 1 
    loop n5 

    n7: 
    pop [si] 
    add si, 1 
    loop n5 




mov ax, 4c00h 
int 21h 

ends 

end start 

У меня есть массив с именем gio И я пытаюсь обратить этот массив, но оставить каждый элемент 3-е на своей позиции. Значение Я хочу получить вывод, как это 5,4,3,2,1,6, но Когда я проверяю переменные, в массиве у меня есть 5,4,2,1,B8. Я заметил, что когда программа сначала попадает в pop [si], все изменения массива, исследуя переменные, показывает мне, что его 5, NULL, 3, 4, 5, 6 не должно быть 5,2,3,4,5,6? Я использую emu8086. Вопрос может показаться глупым, поскольку я новичок в сборке. Благодарю.

ответ

0

Есть три ошибки:

  • Вы pop ИНГ два байта в [si], но вам нужно всего лишь один байт. Решение состоит из pop двух байтов в регистр и перемещает один байт в [si].
  • Под ярлыком n6 вы получили loop n5, но когда cx становится нулевой момент loop не прыгает и блок n7 выполняется, когда он не должен.
  • Вы забыли увеличить счетчик «3» под этикеткой n7.

Вот исправление:

 n6: 
    mov ricxvi, 1 
    add si, 1 
    loop n5 
    jmp finale   ;◄■■ SKIP NEXT BLOCK WHEN CX=0. 

    n7: 
    add ricxvi, 1  ;◄■■ INCREASE THE "3" COUNTER. 
    pop ax    ;◄■■ POP TWO BYTES. 
    mov [si], al  ;◄■■ USE ONE BYTE ONLY. 
    add si, 1 
    loop n5 

finale:     ;◄■■ END LABEL. 

mov ax, 4c00h 
int 21h 
+1

спасибо очень много :) – Rasty

Смежные вопросы