Asembler: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
M (Allah thumbright!) Znaczniki: przez API rewert |
M (bot wprowadza drobne poprawki) Znacznik: przez API |
||
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ł |
|||
Kiełbasa za 5 zł |
|||
+ Fajki za 4 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 |
|||
wino dw 2 ; 1 |
|||
kiełbasa dw 5 ; 2 |
|||
fajki dw 4 ; 3 |
|||
w_sumie dw ? ; | |
|||
dodaj dd 0 ; | |
|||
ile dw 3 ; <- |
|||
.code |
.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 |
|||
</source> |
</source> |
||
[[en:Assembly language]] |
[[en:Assembly language]] |
Wersja z 23:23, 3 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