Инсрукция arpl

Тема в разделе "WASM.ASSEMBLER", создана пользователем sergh, 13 ноя 2006.

  1. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    Всем привет!

    во всех доступных мне источниках (руководство Intel, Зубков, Гук, Орловский, Григорьев) она описана так (обратите внимание на порядок операндов):

    arpl dest, source

    И утверждается, что меняется первый операнд. Однако простейшая проверка

    Код (Text):
    1. int main()
    2. {
    3.     __asm
    4.     {
    5.         mov ax, 3
    6.         mov bx, 16
    7.         arpl ax, bx
    8.     }
    9. }
    дома и на работе показывает, что меняется второй.

    Это коллективная ошибка или мой глюк?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    скорее твой глюк, у меня ничего не меняется, ZF обнуляется(как и должно быть). RPL из ax > RPL из bx, значит в ax остаётся тот же RPL.
     
  3. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    во всех доступных мне источниках ... утверждается, что меняется первый операнд

    У меня все работает так, как написано в мануале. В твоем случае ни один операнд не должен меняться. Единственный эффект от команды с этими операндами - обнуление флага ZF (в PM) либо исключение #UD (в RM или V86).

    Как ты определил, что меняется bx? В каком режиме и на каком процессоре запускается программа? Каков машинный код операции (должно быть 63 D8)?
     
  4. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    Сорри за молчание, сильно занят был.

    Этот код компилируется VC 2005, запускается под виндой в защищённом режиме. Под отладчиком видно, какие регистры меняются, и получается так, что регистры наоборот :) Причина оказалась простая и забавная, достаточно открыть disassembly и поразиться :)

    Это мне ответили тут http://www.rsdn.ru/Forum/Message.aspx?mid=2211919

    Ещё я пробовал под VMWare 5.0, но в реальном режиме она просто повисает на arpl, а в защищённом совсем как-то неправильно работает.

    А в настоящий реальный режим лень было залезать, но видимо теперь уж придётся.
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    sergh
    В реальном режиме 'arpl' дает #UD.

    Я попробовал этот код на FASM, смотрел в ODBG -- все гут, при значениях 3, 16 меняется только флаг ZF.
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Может кто-нибудь подправит название темы, а то смотрится некрасиво :)