Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Assembler this system does not support fullscreen mode https://www.cyberforum.ru/ assembler/ thread882161.html
this system does not support fullscreen mode В чем может быть ошибка?
Assembler Какое будет содержимое регистров после выполнения данного фрагмента программы
Уважаемые форумчане! Подскажите пожалуйста каково буде содержание регистра ECX в десятичном формате после выполнения следующей программы: MOV ECX,28 CLD MOV AL,100 LEA EDI,STRING REPNE SCASB ---------------------------------------- STRING DB "Abcdefghijklmnop qrstuvwxyz"
Assembler проверка оборудования https://www.cyberforum.ru/ assembler/ thread881675.html
прошу помощи. напишите код с комментариями. заранее спасибо. для компьютера на своем рабочем столе определить: - тип компьютера; - версию MS-DOS; - число дисковых накопителей; - тип и число видеоадаптеров; - число периферийных устройств; - количество памяти;
Assembler Ассемблер.повторное нажатие клавиши и использование таймера tasm Есть программа, в которой прорисовывается фигура и при нажатии любой клавиши должна начинаться смена цвета. Подскажите, пожалуйста, как сделать, чтобы при повторном нажатии той же клавиши или после 7 секунд смена цвета останавливалась Процедура смены цвета: changcv proc inc color call zvezda jmp changcv ret https://www.cyberforum.ru/ assembler/ thread880292.html
Запрет на удаление файла Assembler
Задача: Резидентная программа по горячей клавише выводит окно, в котором с помощью клавиш 'стрелка вверх' и 'стрелка вниз' выбирается режим работы с файлами, т.е. тип файлов, которые нельзя удалять. В случае попытки удалить файл с выбранным расширением, программа выдает сообщение. Предусмотреть возможность выгрузки программы и защиту от повторной загрузки. Состоит из двух программ: основной и...
Assembler Идентификация производителя монитора https://www.cyberforum.ru/ assembler/ thread879437.html
Здравствуйте, не первый день пытаюсь найти способ узнать (идентифицировать) производителя монитора. Например (из аиды64): ID монитора SAM0691 Программу нужно написать на TASM, нашёл только информацию по EnumDisplayDevices, но как реализовать не знаю, и ещё вычитал про прерывание INT 1Dh, но про него тоже не где нечего нет...
Assembler Графика MASM Помогите доделать! не могу понять почему движение фигуры происходит только наискось, а должна влево вправо вверх и вниз. вроде все правильно но не работает, помогите разобраться... data segment col db ? horiz dw ? vert dw ? https://www.cyberforum.ru/ assembler/ thread879186.html Часы вторым каналом таймера Assembler
Надо запилить часы с помощью второго канала системного таймера, именно второго, не используя нулевой, с его перерыванием. Где то на просторах интернета, нарыл код, просто стартуем канал в режиме 3, фиксируем значение регистра канала, отнимаем предыдущее значение от текущего, получаем разницу. Теперь в чем загвоздка - как узнать, с какой частотой декрементит свой счетчик второй канал таймера?
Assembler Связь ассемблера с Pascal https://www.cyberforum.ru/ assembler/ thread877335.html
Сформируйте массив, в котором соответствующий элемент является произведением элементов двух массивов. Помогитею.
Assembler Текстовый редактор - своя ОС Доброго времени суток. Задача: написать загрузчик, который выбирал бы либо unix(win) или свою ОС + написать свою ОС - текстовый редактор где можно заменять и удалять участки текста. Загрузчик: ;Bootloader entry-code main: cli ;Clear interrupts https://www.cyberforum.ru/ assembler/ thread877212.html
Как узнать откуда запущена программа? Assembler
напишите пожалуйста код ассемблерной вставки для делфи, например функцию, определяющую откуда запущена программа Добавлено через 15 минут Format of environment block: Offset Size Description 00h N BYTEs first environment variable, ASCIZ string of form "var=value" N BYTEs second environment variable, ASCIZ string ... N BYTEs last environment variable, ASCIZ string of form...
Assembler Почему в TASM нельзя сравнивать память-память? То есть я понимаю, что можно либо регистр-память, либо память-регистр, либо регистр-регистр. Но почему так? И существуют ли методы, как это обойти, кроме как заносить значение переменной в содержимое регистра? https://www.cyberforum.ru/ assembler/ thread875222.html
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
22.09.2013, 09:08 0

FAQ для раздела Assembler, MASM, TASM - Assembler - Ответ 5083982

22.09.2013, 09:08. Показов 143656. Ответов 65
Метки (Все метки)

Ответ

Особенности кодинга под x64
Программирование под x64 не сильно отличается от уже привычного x86, но некоторые отличия всё-же имеются. Как всегда для того, чтобы узнать все эти мелочи приходится собирать инфу в нескольких источниках. Я попытаюсь собрать воедино эти мелочи из руководств Intel, MSDN и руководства FASM.
По части инструкций
Запилено:
  1. 8 xmm-регистров (xmm8-xmm15).
  2. 8 регистров общего назначения (r8-r15)
  3. Теперь для относительной адресации используется регистр rip.
  4. Теперь можно обращаться к младшим байтам индексных регистров (bpl, spl, dil, sil)

Выпилено:
  1. Инструкции для работы с двоично-десятичными числами (aaa, aad, aam, aas, daa и das)
  2. bound
  3. pusha/popa
  4. inc и dec с однобайтовой кодировкой

Ограничения:
  1. В архитектуре x86 присутствует ограничение на длину инструкции в 15 байт. Из этого вытекает невозможность записи инструкций вида
    Assembler
    1
    
    mov [mem64],imm64
    Так как это займёт больше 15 байт (8 байт адреса + 8 байт непосредственного операнда + опкод). Поэтому в x64 можно делать только так
    Assembler
    1
    
    mov [mem64],imm32
    При этом imm32 будет преобразован в qword с учётом знака (movsx).
  2. Инструкция не может ссылаться одновременно на ah,bh,dh,ch и младший байт новых регистров. То есть "mov ah,dl" - допустимо, а "mov ah,r8b" - не допустимо.
  3. Операции с 32 битными операндами обнуляют старшие 4 байта результата. То есть "add eax,ebx" обнулят старшую часть rax. К 8 и 16 битным операндам это не относится.

Соглашение fastcall x64
Передача параметров
Первые 4 параметра передаются через регистры rcx, rdx, r8, r9, остальные параметры передаются в обратном порядке через стек. При этом в стеке резервируется дополнительно 32 байта для первых 4 параметров даже если у функции вообще нет параметров. Параметры с плавающей точкой передаются через регистры xmm0, xmm1, xmm2, xmm3. Если параметр занимает больше 8 байт, он передаётся через указатель. Стек освобождается вызывающей стороной.

Выравнивание стека
Перед вызовом функции rsp должен быть кратен 16. Таким образом если ваша функция имеет чётное количество параметров и количество параметров больше 4, при передаче ей управления rsp будет кратен 8, иначе rsp кратен 16. В FASM макросы .code/.end автоматически добавляют "sub rsp,8" в точке входа для выравнивания стека.

Не изменяемые регистры
Функции не должны изменять содержимое регистров rsi, rdi, rbp, rbx, r12-r15, xmm6-xmm15.

Общие рекомендации
  1. Старайтесь обходиться 32-битными инструкциями, они занимают меньше места, чем 64-битные т.к. для кодирования 64-битных инструкций используется префикс REX. Не стоит забывать, что регистры rbl, spl, dil, sil также кодируются через префикс.
  2. В FASM существует макрос frame/endf, который позволяет выделять и освобождать место в стеке для вызова сразу нескольких API-функций.
    Рассмотрим такой ничего не значащий код
    Assembler
    1
    2
    
    invoke MessageBoxW,rcx,rdx,r8,r9
    invoke ExitProcess,rcx
    Он будет скомпилирован так
    Assembler
    1
    2
    3
    4
    5
    6
    
    sub  rsp,32
    call [MessageBoxW]
    add  rsp,32
    sub  rsp,32
    call [ExitProcess]
    add  rsp,32
    Теперь применим макрос
    Assembler
    1
    2
    3
    4
    
    frame
    invoke MessageBoxW,rcx,rdx,r8,r9
    invoke ExitProcess,rcx
    endf
    И всё заметно улучшится
    Assembler
    1
    2
    3
    4
    
    sub  rsp,32
    call [MessageBoxW]
    call [ExitProcess]
    add  rsp,32
    Кстати обратите внимание: умный макрос invoke не генерирует лишний код
    Assembler
    1
    2
    3
    4
    
    mov rcx,rcx
    mov rdx,rdx
    mov r8,r8
    mov r9,r9
    Можно учитывать это при написании программ.
  3. До появления ollydbg x64 можно использовать PEBrowseDbg64 - вполне годный отладчик. При запуске отладки происходит остановка в ntdll.dll, нажимаем F5 и попадаем на точку входа нашего PE. Присутствует небольшой баг: если начать отладку и просто закрыть отладчик, то он останется висеть в памяти. Для корректного выхода нужно нажать Shift+F5 (завершить отладку), а уже после этого закрывать отладчик.


Вернуться к обсуждению:
FAQ для раздела Assembler, MASM, TASM Assembler
9
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2013, 09:08
Готовые ответы и решения:

Глоссарий для раздела Assembler, MASM, TASM
Thread, AFP, Charles Kludge, 6a6kin, Убежденный, Ethereal, выкладывайте свои глоссарии - разложу...

Организация тем в разделе Assembler, MASM, TASM
Всем привет! Друзья, возник вопрос: как лучше организовать темы в разделе Assembler, MASM, TASM?...

Полезные макросы для MASM и TASM
Не претендую на создание чего-то нового и гениального, но макросы довольно полезные. Часть из того,...

Видеоуроки по Ассемблеру MASM/TASM (для DOS) на русском языке
Всем доброго времени суток. Вобщем, ищу видеоуроки на русском языке по Ассемблеру. Нужно для...

MASM, TASM, FASM: что выбрать для программирования в ядре
Какой асемлер выбрать для проганья в едре? вынь

65
22.09.2013, 09:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2013, 09:08
Помогаю со студенческими работами здесь

Есть ли компиляторы Tasm или Masm для 64-разрядных систем
Есть ли компиляторы Tasm или Masm для 64-разрядной с-мы??? если есть просьба скинуть...

Подскажите ссылки на FAQ для разделов Assembler, MASM, TASM
Скиньте FAQ для разделов Assembler,MASM,TASM где много вариантов "Hello,world!$" и где написана...

Assembler Переделать из TASM в masm
model small .stack 256h .data dbEnter db 10,13,'Enter string:$' dbCode db 10,13,'Code...

Подскажите этот код для TASM или MASM?
Подскажите это TASM или MASM? EOFLINE EQU '$' AStack SEGMENT STACK DW 12 DUP(?) AStack ENDS...

Где скачать TASM или MASM для Win 10 64 разряда
Где скачать TASM или MASM для Win 10 64 разряда ???? Хочу выучить ассемблер не не знаю где скачать...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru