2013-12-07 2 views
0

Я хочу, чтобы ввестия запутался с сравнением и прыжки в сборке

11,00,01,10 in ebx and eax register. 

Everytime i input 01 or 10 i need to jump at l1. 

And if i input 11 or 00 i want to quit from the procedure. 

Как я могу сделать это. Я пробовал это, но только первые два cmp работают, остальные не работают.

 
    cmp ebx,0 
    cmp eax,0 
    je l1 

    cmp ebx,1 
    cmp eax,0 
     jmp quit 

    cmp ebx,1 
    cmp eax,1 
    jmp quit2 

l1: mov edx,offset num3 
    call writestring 
    call crlf 
    mov edx,offset num2 
    call writestring 
    call calf 
+0

Я не рекомендую использовать инструкции mutliple cmp в цепочке. Вы недостаточно контролируете поток программы. Попробуйте буферировать один результат, xor соответствующий регистр и снова выдайте cmp, чтобы объединить результаты, а затем продолжить нужную логику. – icbytes

+0

Я не знаю, как использовать буфер. Мой класс еще не сделал буфер. – lhag

+0

Простейший способ сделать несколько 'cmp' вместе с логической операцией AND [s] состоит в том, чтобы сделать первый' cmp', а затем условный переход, например. на 'my_label', а затем на' my_label: 'сделайте второй' cmp' и соответствующий второй условный переход. – nrz

ответ

1
  1. Вы уверены, что о 'СПМ'? разве это не должно быть «je»?
  2. Насколько мне известно, сохраняется только последний результат cmp. Поэтому, если вы пишете две последовательные команды cmp, первая не будет иметь никакого эффекта. Вы должны проверить результат сразу после команды cmp.
  3. Если вы прыгаете сразу после проверки 10 случаев, вы никогда не сможете проверить случай 11.
+0

, то как я могу получить желаемый результат. – lhag

+0

Немного долго, но вы можете попробовать написать код как простой алгоритм (как в C) и преобразовать его в сборку. Например: if (eax == 0) {если ebx == 0 {перейти к l1} else {quit; }} else {if (eax == 1) ...} – MaMazav

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

  • Нет связанных вопросов^_^