Widziałem w życiu wiele przykładów, lepszych i gorszych.

Asembler jest trudny z natury, bo instrukcji dla procesora nie wymyślano aby było łatwo. Wymyślano by było.

Osoby chętne do nauki Asemblera wpisują w wyszukiwarkę “Asembler hello world” i trafiają na przykład który po przez przerwanie procesorowe (zgodne dla DOS’a) wyświetlają napis zakończony znakiem dolara ‘$’.

Problem w tym, że nie ma informacji jak cyfrę wyświetlić, lub też ciąg znaków wygenerowany podczas trwania programu bądź jak wyświetlić znak dolara.

Stwierdziłem, że:
Znajdę taki przykład, w którym proste operacje będą proste.

I oto on:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
format PE console
entry start
 
include 'include\win32a.inc'
 
section '.code' code readable executable
start:
 
        cinvoke printf, print_str,hello_msg
        cinvoke printf, print_int,dword [_var1]
        mov eax, -5
        sub eax, 4
        cinvoke printf, print_int,eax
        cinvoke getchar
 
        invoke ExitProcess, 0
 
section '.data' data readable writeable
hello_msg db 'Hello, world!',0
_var1 dq 65
 
print_str db "%s",13,10,0
print_int db "%d",13,10,0
 
section '.idata' import data readable
 
library kernel,'kernel32.dll',\
        msvcrt,'msvcrt.dll',\
        user,'USER32.DLL',\
        kbase,'kbase.dll'
 
import kernel,\
       ExitProcess,'ExitProcess'
 
import msvcrt,\
       printf,'printf',\
       getchar,'_fgetchar'
 
import user,\
        wsprintf,'wsprintfA'

Przykład jest pod Windows opiera się na kompilatorze FASM (flat assembler), a z forum FASM pochodzi ten przykład. Tak, zmieniłem go trochę.

Assembler jest trudny, jeśli chcesz go się uczyć to nie zatrzymuj się na Hello world, bo skompilować gotowca to potrafi nawet chomik. Poważnie.

Podobne teksty: