Прерывание 21h "Вывод текста" - Assembler
Формулировка задачи:
После не совсем удачного знакомства с двумя учебниками В.И. Юрова и О.А. Калашникова, связано было с тем что не смог найти рекомендуемые ими программы. Решил написать программу "Hello, world! " в masm32. Программа выдает ошибку в девятой строке "syntax error". Не могу понять в чем проблема ? Может проблема в компиляторе ?. Так как код в примере из книги не запускается.
*При использование регистра edх программа запускается, но вылетает с ошибкой
Код из "Ассемблер это просто" О.А. Калашников
Листинг программы
- .386
- .model flat, stdcall
- option casemap:none
- .data
- messa db 'Hello World!$'
- .code
- start:
- mov ah,9
- mov dx,OFFSET messa ;*
- int 21h
- int 20h
- end start
- end.
Листинг программы
- GSES segment
- org 100h
- Begin:
- mov ah,9
- mov ds,offset Message
- int 21h
- int 20h
- Message db 'Hello, world!$'
- CSEG ends
- end Begin
Решение задачи: «Прерывание 21h "Вывод текста"»
textual
Листинг программы
- format PE64 GUI
- entry start
- section '.text' code readable executable
- start:
- sub rsp,8*5
- mov r9,0
- lea r8,[_caption]
- lea rdx,[_message]
- mov rcx,0
- call [MessageBoxA]
- add rsp,40
- sub rsp,16
- mov ecx,eax
- call [ExitProcess]
- section '.data' data readable writeable
- _caption db 'Win64 assembly program',0
- _message db 'Hello World!',0
- section '.idata' import data readable writeable
- dd 0,0,0,RVA kernel_name,RVA kernel_table
- dd 0,0,0,RVA user_name,RVA user_table
- dd 0,0,0,0,0
- kernel_table:
- ExitProcess dq RVA _ExitProcess
- dq 0
- user_table:
- MessageBoxA dq RVA _MessageBoxA
- dq 0
- kernel_name db 'KERNEL32.DLL',0
- user_name db 'USER32.DLL',0
- _ExitProcess dw 0
- db 'ExitProcess',0
- _MessageBoxA dw 0
- db 'MessageBoxA',0
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д