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="asm">
<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ł
+ 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="asm">
<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
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
dodawaj endp
dodaj proc near
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
align 3
aaa:
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
align 49
bbb:
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
align 107
ccc:
ccc:
pop ecx
pop ecx
nop
nop
ret
ret
endp dodaj
endp dodaj
pisz proc near
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
endp pisz
align 2048
align 2048
start:
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:23, 4 paź 2016


Ten artykuł jest częścią cyklu naukowego języki komputerowe.

Języki programowania:


Inne języki komputerowe:


edytuj ten szablon
Plik:Disassembler.PNG
Przez disassemblera można nawet disassemblować obrazki!

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