Asembler: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
M (Wycofano ostatnie edycje autorstwa Expert3222Bot; przywrócono ostatnią wersję autorstwa SH3VEK.) |
M (-szablon) |
||
Linia 1: | Linia 1: | ||
{{programisto}} |
|||
<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!]] |
Wersja z 08:18, 18 sie 2020
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