Подсказки на компьютерную тематику

Можно подсмотреть, если забыли…

Как создать образец программы на ассемблере MASM для Windows

Пример работающей программы на ассемблере MASM на Windows


;стандартный начальный сегмент кода с библиотеками и настройками
.386 ;все процессоры Intel, начиная с 386
.model flat, stdcall ;компиляция в exe-файл с возможностью вызова API
option casemap: none ;опция различает строчные и прописные буквы
include /masm32/include/kernel32.inc ; подключаем файл прототипов функций
include /masm32/include/windows.inc ; подключаем файл прототипов функций
include /masm32/include/user32.inc ; подключаем файл прототипов функций

includelib <\masm32\lib\kernel32.lib> ; подключаем файл библиотек
includelib /masm32/lib/user32.lib ; подключаем файл библиотек

;стандартный сегмент кода с переменными,все данные хранятся в памяти, а не в регистрах процессора!
.data
msg db "Text",0dh,0ah

;стандартный сегмент с самим кодом программы, показаны работающие куски кода
.code
start:
mov al,1 ;al=1
sub ah,ah ;ah=ah-ah
dec ah ;ah=ah-1
mov eax,2 ;eax=2
mov ecx,3 ;ecx=3
push eax ;2 из eax пошла в стек
push ecx ;3 из ecx пошла в стек
pop eax ;последнее значение стека, т.е. 3 ушла в eax
pop ecx ;ставшее последним значение стека 2 ушла в ecx
mov eax, 2211h
mov ecx, 4433h
xchg eax,ecx ;из eax помещает в ecx, а в eax из ecx, т.е. меняет данные местами
mov ax, 2
mov bx, 3
call AddDigs ;вызов процедуры AddDigs

;вместо двух строк для правильного выхода из программы
push 0
call ExitProcess
;можно использовать одну строку
invoke ExitProcess,0

AddDigs proc ;создание процедуры AddDigs
add ax,bx
ret ;выход из процедуры

;стандартный сегмент кода, обозначает конец самой программы
end start

Как создать образец программы на ассемблере MASM для Windows

Пример работающей программы на ассемблере MASM на Windows


;стандартный начальный сегмент кода с библиотеками и настройками
.386 ;все процессоры Intel, начиная с 386
.model flat, stdcall ;компиляция в exe-файл с возможностью вызова API
option casemap: none ;опция различает строчные и прописные буквы
include /masm32/include/kernel32.inc ; подключаем файл прототипов функций
include /masm32/include/windows.inc ; подключаем файл прототипов функций
include /masm32/include/user32.inc ; подключаем файл прототипов функций

includelib <\masm32\lib\kernel32.lib> ; подключаем файл библиотек
includelib /masm32/lib/user32.lib ; подключаем файл библиотек

;стандартный сегмент кода с переменными,все данные хранятся в памяти, а не в регистрах процессора!
.data
msg db "Text",0dh,0ah

;стандартный сегмент с самим кодом программы, показаны работающие куски кода
.code
start:
mov al,1 ;al=1
sub ah,ah ;ah=ah-ah
dec ah ;ah=ah-1
mov eax,2 ;eax=2
mov ecx,3 ;ecx=3
push eax ;2 из eax пошла в стек
push ecx ;3 из ecx пошла в стек
pop eax ;последнее значение стека, т.е. 3 ушла в eax
pop ecx ;ставшее последним значение стека 2 ушла в ecx
mov eax, 2211h
mov ecx, 4433h
xchg eax,ecx ;из eax помещает в ecx, а в eax из ecx, т.е. меняет данные местами
mov ax, 2
mov bx, 3
call AddDigs ;вызов процедуры AddDigs

;вместо двух строк для правильного выхода из программы
push 0
call ExitProcess
;можно использовать одну строку
invoke ExitProcess,0

AddDigs proc ;создание процедуры AddDigs
add ax,bx
ret ;выход из процедуры

;стандартный сегмент кода, обозначает конец самой программы
end start