asm

Тема в разделе "WASM.ASSEMBLER", создана пользователем sato, 8 окт 2017.

  1. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    235
    как бы выглядел этот код на MASM32
    Код (Text):
    1. %define i    ecx
    2. adc    dl, ih
     
  2. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    235
    код написан для NASM
     
  3. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    235
    если перевести
    adc dl, ih
    на MASM то
    adc dl, ecx h ;зачем тут h?
     
  4. yashechka

    yashechka Ростовский фанат Нарвахи Команда форума

    Публикаций:
    67
    Регистрация:
    2 янв 2012
    Сообщения:
    1.468
    Адрес:
    Россия
    h - это наверное hex число.
     
  5. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    235
    adc dl, ecx h

    а как компилятор смог запихнуть ECX в DL?
     
  6. yashechka

    yashechka Ростовский фанат Нарвахи Команда форума

    Публикаций:
    67
    Регистрация:
    2 янв 2012
    Сообщения:
    1.468
    Адрес:
    Россия
    Х.з. это нужно откомпилить и посмотреть.
    Или h - хайг, старшая часть регистра.
     
  7. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    235
    я нашёл на одном ресурсе
    mov r0l,r3h ; mov al,bh
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.030
    sato,

    Масм так и называется, потому что это макро язык. Любое выражение может быть макросом. Можно создать такое определение, но не ясно будут ли корреляции, так как h" это постфикс.
    Регистровые же операции возможны только при одинаковой разрядности аргументов, так например ecx регистр делится на части - Ecx, cx -> CH_CL.
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.030
    Кстати на счёт имен регистров. Изначально процик был 16 битным. Был набор регистров Rx, который делился на 8 бит регистры Rl(lo) и Rh(hi). С введением 32 бит разрядность увеличилась, но адресация младшей регистровой пары не измелилась - Erx(extended). Получается что старшие 16 бит не кодируются в опкоде, только младшие.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.030
    Кодируются в инструкции(MRM), а не в опкоде, опечатка. Решил зафиксить, так как может возникнуть не понимание.
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    7
    Регистрация:
    25 июн 2008
    Сообщения:
    2.648
    sato,
    64-разрядный Intel/AMD дает доступ к 16 целочисленным 64-разрядным регистрам R0-R7 (RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI) и R8-R15 64-разрядная кодировка
     
    _edge нравится это.
  12. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    235
    32 разрядный OllyDbg поддерживает инструкцию
    Код (Text):
    1. MOVQ MM0,QWORD PTR DS:[ECX]
    а MASM32 выдаёт ошибку
    F:\masm32\exe\sha3.bat(161) : error A2085: instruction or register not accepted
    in current CPU mode
    может из за .386?
     
    Последнее редактирование: 9 окт 2017
  13. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    423
    sato нравится это.
  14. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    235
    добавил .mmx
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.030
    Mikl___,

    А причём тут 64, у тс засада с 8 бит операциями. Раз упомянули расширенные наборы, то следует сразу обратить внимание на главное - эти наборы включены в блок NPX, процессорного расширения на математику. А это значит что если вы используете хотя бы один из этих регистров, ядру придётся сохранять весь контекст математики, а так как он очень толстый, то тайминг на перезагрузки его большой. Определите имеет ли смысл это использовать.
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    7
    Регистрация:
    25 июн 2008
    Сообщения:
    2.648
    Indy_,
    изначально Intel процик был 4, позже 8, еще позже 16 разрядным. r0 назвали регистром A, r1 регистром B, r2 регистром C, r3 регистром D, а к памяти обращались через пару регистров HL, в 16/32/64 разрядах ничего не поменялось и RAX/EAX/AX/AL в кодировках команд в поле RRR=000
     
  17. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.030
    Mikl___,

    Исходная zilog архитектура была 8 битной с расширениями до 16. Потом уже 8086 etc. Именно оттуда вы знаете название регистровой пары HL, там был крайне простой и логичный набор инструкций, их кодировка. Но это не важно.
     
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    7
    Регистрация:
    25 июн 2008
    Сообщения:
    2.648
    я об intel 4004 --> 8008 --> 8080
     
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.030
    Mikl___,

    У меня книжка по этим есть совдеповская :)

    Ну а если серьёзно - вопрос тс, обьясните ему кодировку инструкций. И что юзать набор математики не есть хорошо из за размера контекста, fxsave невероятно тормозная инструкция, что впрочем не удивительно - при RW такого большого буфера из за валидаций безопасности тайминг падает до совсем не приемлемых значений.
     
  20. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    7
    Регистрация:
    25 июн 2008
    Сообщения:
    2.648
    Indy_,
    вроде бы ТС спросил как макрос NASM'а "%define i ecx" будет кодировать строку "adc dl, ih" IMHO "adc dl,ch", но строки "%define i ecx" для этого явно недостаточно. Чуть ниже ТС написал
    Что это за ресурс? Наверное, также NASM. Я пытался немного писать на NASM, знаю, что там мощнейшая поддержка макросов, что NASM как FASM может создавать практически любые бинарные файлы не используя линкеры и компиляторы ресурсов, то есть NASM сам себе "злобный Буратино"...
     
    sato нравится это.