Макросы в Масм.

Тема в разделе "WASM.BEGINNERS", создана пользователем Zadrot, 9 окт 2010.

  1. Zadrot

    Zadrot New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2010
    Сообщения:
    1
    Люди напишите мне в виде кода данный макрос... ну не опытный я... )))

    _aam macro num ;ah=al/num;al=al mod num
    db 0D4h, num
    endm


    _aad macro num ;al=ah*num+al;ah=0
    db 0D5h, num
    endm


    _aam 10h

    не посылайте меня в гугл, не говорите почитайте вот это, а просто переведите в код.

    Огромное вам спасибо!!! Я думаю у вас это заняло не больше 1 минуты :)...
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Код (Text):
    1.  db 0D4h, 10h
    это и есть команда aam. просто в масме не поддерживаются все ее плюшки. делитель или множитель можно задавать. это и фиксится.
    т.е. по хорошему aam эквивалентно db 0D4h 0Ah
    с помощью этого макроса можно задавать произвольный делитель т.е. aam 10h эквивалентно db 0D4h, 10h. но масм будет ругаться на aam 10h
     
  3. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Zadrot,

    Если прочитать странички Intel SDM/AMD APM про инструкции aam/aad, можно заметить (no mnemonic)/(None) в соответствующей графе таблицы. Передовые ассемблеры понимают формат а-ля aam imm8, для MASM приходится использовать прямолинейную генерацию опкода побайтно через директиву db. В этом и состоит сокровенный смысл этих макроинструкций: заменить _aam X на db 0D4h, X, к примеру.

    P.S. aam 0 вызывает #DE, ага.
     
  4. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    OPTION NOKEYWORD:<aam aad>
    aam macro num
    db 0D4h
    IFDIF <num>,<>
    db num
    ELSE
    db 0Ah
    ENDIF
    endm
    aad macro num
    db 0D5h
    IFDIF <num>,<>
    db num
    ELSE
    db 0Ah
    ENDIF
    endm