Asembler: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
M (bot wprowadza drobne poprawki) Znacznik: przez API |
M (Wycofano ostatnie edycje autorstwa Expert3222Bot; przywrócono ostatnią wersję autorstwa SH3VEK.) |
||
Linia 1: | Linia 1: | ||
{{programisto}} |
{{programisto}} |
||
<br |
<br/> |
||
{{programowanie}} |
{{programowanie}} |
||
[[Plik:Disassembler.PNG|thumb|200px|Przez disassemblera można nawet disassemblować obrazki!]] |
[[Plik:Disassembler.PNG|thumb|200px|Przez disassemblera można nawet disassemblować obrazki!]] |
||
Linia 6: | Linia 6: | ||
== Hello World == |
== Hello World == |
||
<source lang= |
<source lang="asm"> |
||
TITLE hello-w |
TITLE hello-w |
||
ss stos |
ss stos |
||
Linia 131: | Linia 131: | ||
Tak problem wygląda dla zwyczajnego człowieka: |
Tak problem wygląda dla zwyczajnego człowieka: |
||
Wino za 2 zł |
Wino za 2 zł |
||
Kiełbasa za 5 zł |
Kiełbasa za 5 zł |
||
+ Fajki za 4 zł |
|||
-------------------- |
-------------------- |
||
W sumie: 11 zł |
W sumie: 11 zł |
||
W asemblerze rozwiązanie tego samego problemu wygląda tak: |
W asemblerze rozwiązanie tego samego problemu wygląda tak: |
||
<source lang= |
<source lang="asm"> |
||
.data |
.data |
||
align 1024 |
align 1024 |
||
wino dw 2 ; 1 |
wino dw 2 ; 1 |
||
kiełbasa dw 5 ; 2 |
kiełbasa dw 5 ; 2 |
||
fajki dw 4 ; 3 |
fajki dw 4 ; 3 |
||
w_sumie dw ? ; | |
w_sumie dw ? ; | |
||
dodaj dd 0 ; | |
dodaj dd 0 ; | |
||
ile dw 3 ; <- |
ile dw 3 ; <- |
||
.code |
.code |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
jmp start |
jmp start |
||
dodawaj proc near |
|||
nop |
nop |
||
push ax |
push ax |
||
nop |
nop |
||
sub ax,ax |
sub ax,ax |
||
nop |
nop |
||
push ds |
push ds |
||
nop |
nop |
||
mov ds, seg w_sumie |
mov ds, seg w_sumie |
||
nop |
nop |
||
push dx |
push dx |
||
nop |
nop |
||
mov dx, offset w_sumie |
mov dx, offset w_sumie |
||
nop |
nop |
||
mov ds:dx, ax |
mov ds:dx, ax |
||
nop |
nop |
||
mov dx, offset ile |
mov dx, offset ile |
||
nop |
nop |
||
push ecx |
push ecx |
||
nop |
nop |
||
mov cx, ds:dx |
mov cx, ds:dx |
||
nop |
nop |
||
int cyferka=0 |
int cyferka=0 |
||
cyferka+1= |
cyferka+1= |
||
drukuj |
drukuj |
||
lista: |
lista: |
||
0+0 |
0+0 |
||
888=888 |
888=888 |
||
mov dx, offset wino |
mov dx, offset wino |
||
nop |
nop |
||
dec dx |
dec dx |
||
nop |
nop |
||
align 4096 |
align 4096 |
||
lista: |
lista: |
||
nop |
nop |
||
inc dx |
inc dx |
||
nop |
nop |
||
call proc |
call proc |
||
nop |
nop |
||
inc dx |
inc dx |
||
nop |
nop |
||
loop lista |
loop lista |
||
nop |
nop |
||
pop ecx |
pop ecx |
||
nop |
nop |
||
pop dx |
pop dx |
||
nop |
nop |
||
pop ds |
pop ds |
||
nop |
nop |
||
pop ax |
pop ax |
||
nop |
nop |
||
ret |
ret |
||
dodawaj endp |
|||
dodaj proc near |
|||
nop |
nop |
||
push ecx |
push ecx |
||
nop |
nop |
||
xor ecx, ecx |
xor ecx, ecx |
||
nop |
nop |
||
mov cx, ds:dx |
mov cx, ds:dx |
||
nop |
nop |
||
jmp bbb |
jmp bbb |
||
align 3 |
|||
aaa: |
|||
nop |
nop |
||
mov bx, ds:dx |
mov bx, ds:dx |
||
nop |
nop |
||
align 65536 |
align 65536 |
||
dodawanie: |
dodawanie: |
||
nop |
nop |
||
inc bx |
inc bx |
||
nop |
nop |
||
loop dodawanie |
loop dodawanie |
||
nop |
nop |
||
mov ds:dx, bx |
mov ds:dx, bx |
||
nop |
nop |
||
pop dx |
pop dx |
||
nop |
nop |
||
pop bx |
pop bx |
||
nop |
nop |
||
jmp ccc |
jmp ccc |
||
align 49 |
|||
bbb: |
|||
nop |
nop |
||
push bx |
push bx |
||
nop |
nop |
||
push dx |
push dx |
||
nop |
nop |
||
mov dx, offset w_sumie |
mov dx, offset w_sumie |
||
jmp aaa |
jmp aaa |
||
align 107 |
|||
ccc: |
|||
pop ecx |
pop ecx |
||
nop |
nop |
||
ret |
ret |
||
endp dodaj |
|||
pisz proc near |
|||
nop |
nop |
||
push bp |
push bp |
||
nop |
nop |
||
mov bp, 3 |
mov bp, 3 |
||
nop |
nop |
||
push ax |
push ax |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
push bx |
push bx |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
inc ah |
inc ah |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
inc ah |
inc ah |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
sub bx, bx |
sub bx, bx |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
push ecx |
push ecx |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
mov ecx, 1 |
mov ecx, 1 |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
add ecx,2 |
add ecx,2 |
||
nop |
nop |
||
inc bp |
inc bp |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
inc ecx |
inc ecx |
||
nop |
nop |
||
align 32768 |
align 32768 |
||
znak1: |
znak1: |
||
nop |
nop |
||
and ah, 0 |
and ah, 0 |
||
nop |
nop |
||
or ah, 1 |
or ah, 1 |
||
nop |
nop |
||
add dl, ah |
add dl, ah |
||
nop |
nop |
||
shl ah, ah |
shl ah, ah |
||
nop |
nop |
||
add dl, ah |
add dl, ah |
||
nop |
nop |
||
inc dl |
inc dl |
||
nop |
nop |
||
loop znak1 |
loop znak1 |
||
nop |
nop |
||
xor ah, ah |
xor ah, ah |
||
nop |
nop |
||
int 21h |
int 21h |
||
nop |
nop |
||
add ecx, bp |
add ecx, bp |
||
nop |
nop |
||
dec ecx |
dec ecx |
||
nop |
nop |
||
align 8192 |
align 8192 |
||
znak2: |
znak2: |
||
nop |
nop |
||
dec dl |
dec dl |
||
nop |
nop |
||
dec dl |
dec dl |
||
nop |
nop |
||
dec dl |
dec dl |
||
nop |
nop |
||
dec dl |
dec dl |
||
nop |
nop |
||
loop znak2 |
loop znak2 |
||
nop |
nop |
||
pop ecx |
pop ecx |
||
nop |
nop |
||
pop bx |
pop bx |
||
nop |
nop |
||
pop ax |
pop ax |
||
nop |
nop |
||
pop bp |
pop bp |
||
nop |
nop |
||
ret |
ret |
||
endp pisz |
|||
align 2048 |
|||
start: |
|||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
nop |
nop |
||
call dodawaj |
call dodawaj |
||
nop |
nop |
||
mov dl, 1 |
mov dl, 1 |
||
nop |
nop |
||
call pisz |
call pisz |
||
nop |
nop |
||
call pisz |
call pisz |
||
nop |
nop |
||
mov ax,4c00h |
mov ax,4c00h |
||
nop |
nop |
||
int 21h |
int 21h |
||
nop |
nop |
||
</source> |
</source> |
||
[[en:Assembly language]] |
[[en:Assembly language]] |
Wersja z 00:21, 5 paź 2016
Uwaga! Jest po północy! Programisto! Czy wiesz gdzie wskazuje teraz Twój wskaźnik? |
Ten artykuł jest częścią cyklu naukowego języki komputerowe. |
Języki programowania: |
Inne języki komputerowe: |
|
edytuj ten szablon |
Asemblery (ang. „nie wiem o co biega”, pot. Assembler) – wielgachna rodzina języków programowania wymyślonych w celu utrudniania życia ludzkości. Programy zapisane w asemblerach są wręcz nieludzko długie, w związku z czym wykorzystywane są głównie przez prawdziwych hakerów i ich organy nabyte, potocznie zwane komputerami.
Hello World
TITLE hello-w
ss stos
algin 1,1
int zero
add tekst
.code
text tekst
wyswietl:
pop stos,viewer
view tekst
goto przypisz
goto wyswietl
.data
kielich=kradnij(kielich)
kieliszek=kielich(zdrobienie,for (wino or winko))
kufel=kubek(szklany,duży,for (piwo(jasne or ciemne) or piwko(jasne or ciemne)))
beka=znaczenie(2(kradnij(beka,drewniana)),1(beknij(głośno)))
beczka=beka(zdrobnienie,znaczenie(2))
szklanka=kradnij(szklanka))
szklaneczka=zdrobnienie(szklanka))
tekst=[[Hello World]]
txt = tekst
.code
nop
nop
nop
nop
nop
txt Hello
nop
push dx
mov tekst,dx
nop
push
open piwo
wlej kufel,piwo
pij kufel
push ax
add ax,bx
int 21h
pop dx
int 10h
newlist lista,dx
open wódka
wlej wódka,szklaneczka
pij szklaneczka
add szklaneczka,bx
add bx,ax
add dx,ax
push dx
pop bx
push cx
pop dx
pop dx
pop dx
mov bx,ax
add ax,cx
add ax,dx
int 21h
open bimber
wlej bimber,beczka
pij beczka
add ax,cx
add cx,dx
add dx,cx
add ax,dx
mov dx,cx
push cx
pop dx
pop dx
pop dx
pop cs
pop ds
pop ds
pop es
pop ds
pop es
open wino
wlej wino,kieliszek
pij kieliszek
nop
push
exec Hello
nop
push
push
push
int linie
push
nop
Lista:
(1)=:=Hello
(2)=:=World
nop
push
nop
nop
push
nop
nop
nop
nop
nop
nop
nop
nop
push
create LIST,Lista2
aint i
char znak
Przypisz:
i=znak(number)
znak-i
add Lista2(i),znak
push znak
goto przypisz
end
Lista: Lista
Przykład programowania systemu
Tak problem wygląda dla zwyczajnego człowieka:
Wino za 2 zł Kiełbasa za 5 zł + Fajki za 4 zł -------------------- W sumie: 11 zł
W asemblerze rozwiązanie tego samego problemu wygląda tak:
.data
align 1024
wino dw 2 ; 1
kiełbasa dw 5 ; 2
fajki dw 4 ; 3
w_sumie dw ? ; |
dodaj dd 0 ; |
ile dw 3 ; <-
.code
nop
nop
nop
nop
nop
nop
nop
nop
nop
jmp start
dodawaj proc near
nop
push ax
nop
sub ax,ax
nop
push ds
nop
mov ds, seg w_sumie
nop
push dx
nop
mov dx, offset w_sumie
nop
mov ds:dx, ax
nop
mov dx, offset ile
nop
push ecx
nop
mov cx, ds:dx
nop
int cyferka=0
cyferka+1=
drukuj
lista:
0+0
888=888
mov dx, offset wino
nop
dec dx
nop
align 4096
lista:
nop
inc dx
nop
call proc
nop
inc dx
nop
loop lista
nop
pop ecx
nop
pop dx
nop
pop ds
nop
pop ax
nop
ret
dodawaj endp
dodaj proc near
nop
push ecx
nop
xor ecx, ecx
nop
mov cx, ds:dx
nop
jmp bbb
align 3
aaa:
nop
mov bx, ds:dx
nop
align 65536
dodawanie:
nop
inc bx
nop
loop dodawanie
nop
mov ds:dx, bx
nop
pop dx
nop
pop bx
nop
jmp ccc
align 49
bbb:
nop
push bx
nop
push dx
nop
mov dx, offset w_sumie
jmp aaa
align 107
ccc:
pop ecx
nop
ret
endp dodaj
pisz proc near
nop
push bp
nop
mov bp, 3
nop
push ax
nop
inc bp
nop
inc bp
nop
push bx
nop
inc bp
nop
inc ah
nop
inc bp
nop
inc ah
nop
inc bp
nop
sub bx, bx
nop
inc bp
nop
push ecx
nop
inc bp
nop
mov ecx, 1
nop
inc bp
nop
inc ecx
nop
inc ecx
nop
inc ecx
nop
inc bp
nop
add ecx,2
nop
inc bp
nop
inc ecx
nop
inc ecx
nop
inc ecx
nop
inc ecx
nop
inc ecx
nop
inc ecx
nop
align 32768
znak1:
nop
and ah, 0
nop
or ah, 1
nop
add dl, ah
nop
shl ah, ah
nop
add dl, ah
nop
inc dl
nop
loop znak1
nop
xor ah, ah
nop
int 21h
nop
add ecx, bp
nop
dec ecx
nop
align 8192
znak2:
nop
dec dl
nop
dec dl
nop
dec dl
nop
dec dl
nop
loop znak2
nop
pop ecx
nop
pop bx
nop
pop ax
nop
pop bp
nop
ret
endp pisz
align 2048
start:
nop
nop
nop
nop
nop
nop
call dodawaj
nop
mov dl, 1
nop
call pisz
nop
call pisz
nop
mov ax,4c00h
nop
int 21h
nop