Перенести программу из tasm в fasm x64 - Assembler

Узнай цену своей работы

Формулировка задачи:

Уважаемые программисты!!! прошу помочь переделать простую прогу из tasm в fasm x64!!! буду благодарен за любую помощь!!!

Решение задачи: «Перенести программу из tasm в fasm x64»

textual
Листинг программы
mov        r9d,0                   ; uType == MB_OK (кнопка по умолчанию)
                                           ; аргументы по соглашению x86-64
                                           ; передаются через регистры, не через стек!
                                           ; префикс d задает регистр размером в слово,
                                           ; можно использовать и mov r9,0, но тогда
                                           ; машинный код будет на байт длиннее
        lea        r8,[_caption]           ; lpCaption, передаем смещение
                                           ; команда lea занимает всего 7 байт,
                                           ; а mov reg,offset - целых 11, так что
                                           ; lea намного более предпочтительна
        lea        rdx,[_message]          ; lpText, передаем смещение выводимой строки
        mov        rcx,0                   ; hWnd, передам дескриптор окна-владельца
                                           ; (можно также использовать xor rcx,rcx
                                           ; что на три байта короче)
        call       [MessageBox]            ; вызываем функцию MessageBox
        mov        ecx,eax                 ; заносим в ecx результат возврата
                                           ; (Функция ExitProcess ожидает 32-битный параметр;
                                           ; можно использовать и mov rcx,rax, но это будет
                                           ; на байт длиннее)
        call       [ExitProcess]           ; вызываем функцию ExitProcess

Объяснение кода листинга программы

Вот что получилось:

  1. Переменная uType содержит значение MB_OK, что соответствует кнопке по умолчанию.
  2. Далее идут аргументы для функции MessageBox:
    • lpCaption — адрес строки с названием диалогового окна.
    • lpText — адрес выводимой строки.
    • hWnd — дескриптор окна-владельца.
  3. Вызывается функция MessageBox.
  4. Результат работы функции MessageBox сохраняется в регистре eax.
  5. Значение eax приводится к 32-битному значению и передается в функцию ExitProcess.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.769 из 5
Похожие ответы