И снова "hello world" - Assembler
Формулировка задачи:
Здравствуйте.
Читаю Крупника на досуге самоучитель "Ассемблер". Есть вопрос (ща наверное ржать будите ). Почему вот эта программа выводит сообщение на экран?
а вот эта нет?
комп думает некоторое время и все. В отладчике в eax не появляется дискриптор, (в книге написано что должен) там стоят одни ноли. Что делаю не так?
.386 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib .data msg_title db "Title", 0 msg_message db "Hello world", 0 .code start: invoke MessageBox, 0, addr msg_message, addr msg_title, MB_OK invoke ExitProcess, 0 end start
.386 .model flat, stdcall option casemap : none ExitProcess proto: DWORD GetStdHandle proto : DWORD WriteConsoleA proto : DWORD, : DWORD, : DWORD, : DWORD, : DWORD includelib\masm32\lib\kernel32.lib .data stdout DWORD ? msg BYTE "la la la",0dh, 0ah cWritten DWORD ? .code invoke GetStdHandle, -11 mov stdout, eax invoke WriteConsoleA, stdout, ADDR msg, sizeof msg, ADDR cWritten, 0 invoke ExitProcess, 0 end start
Решение задачи: «И снова "hello world"»
textual
Листинг программы
org 100h jmp start mass db 107,111,108,111,98,111,107,56,55,52,0 start: push 47104 mov di,11111000110b mov ax,3 int 16 ;=================[ #1 ]======== mov ecx,4 mov eax,6f6c6548h @print: int 29h ror eax,8 loop @print mov ax,0a0dh int 41 shr ax,8 int 29h ;=================[ #2 ]======== call @f db 'Fucking stack!$' @@: pop dx mov ah,9 int 33 ;=================[ #3 ]======== pop es mov si,mass mov ah,12 @@: lodsb or al,al je @exit stosw jmp @b @exit: xor ax, ax int 16h int 20h