Asembler: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
Ponury bot (dyskusja • edycje) M (Robot wykonał kosmetyczne poprawki) |
(Najpierw destination, potem source) |
||
Linia 39: | Linia 39: | ||
push |
push |
||
open piwo |
open piwo |
||
wlej |
wlej kufel,piwo |
||
pij kufel |
pij kufel |
||
push ax |
push ax |
Wersja z 17:19, 11 sty 2013
Ten artykuł jest częścią cyklu naukowego języki komputerowe. |
Języki programowania: |
Inne języki komputerowe: |
|
edytuj ten szablon |
Asemblery (ang. „niewiem 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