Что не так в этом ассемблерном коде, условно jmp - PullRequest
1 голос
/ 20 июня 2011

В приведенном ниже коде сборки Intel я использую инструкцию cmp (сравнение) перед условным переходом, но для приведенного ниже кода он не должен переходить, а выполняет и печатает строку.

Что идет не так. (Плоский ассемблер, Win-7 x32).

ORG 100h
USE16


        mov ah, 09
        mov dx, message
        cmp ah, 10d
        je condjmp


condjmp:
        int 21h

        mov ah,01
        int 21h

        mov ah,4ch
        int 21h

 message db 'conditional jump', 0Ah, '$'

Ответы [ 2 ]

6 голосов
/ 20 июня 2011

Переход переходит к метке, которая следует сразу за инструкцией jmp, поэтому не имеет значения, выполнен ли переход, вы всегда останетесь на метке.

0 голосов
/ 04 декабря 2011

Да Goldenmean, как сказал вам Саймон,

Если вы будете следовать логическому ПОТОКУ вашей программы, вы обнаружите, что в обоих случаях условного перехода следующая правильная инструкция будет выглядеть так:

int 0x21

Я имею в виду,

Если JE не соответствует действительности ---> следующая инструкция = int 0x21, если JE true -------> следующая инструкция = int 0x21

Надеюсь, это было достаточно ясно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...