Offipalsta.COM  

Palaa takaisin   Offipalsta.COM > Linkit muihin palveluihin > Elävä Arkisto > Programming > Symbolic machine code
Rekisteröidy Offiblogit Yhteisö Kalenteri Viestit tänään Haku

Symbolic machine code Symbolic machine code, ASM

 
 
Työkalut Etsi tästä viestiketjusta Näkymä
  #1  
Vanha 08.12.2002, 20:48
Lars
Guest
 
Viestit: n/a
Perusasetus

WORMGAME.ASM


Lars 17v ja asm-matopeli.
Ei mitään muistikuvaa toimiiko.

.model tiny
.286p
.stack 256

enter_vga256 macro
mov ah,0
mov al,13h
int 10h
endm enter_vga256

enter_text macro
mov ah,0
mov al,03h
int 10h
endm enter_text

terminate macro
mov ah,4ch
mov al,error
int 21h
endm terminate

laskekerros macro
push ax
mov ax,0
cmp cx,12
jg poijes
add ax,316
cmp cx,8
jg poijes
add ax,316
cmp cx,4
jg poijes
add ax,316
poijes:
sub cx,ax
pop ax
endm laskekerros

draw macro ; dx = x bx = y
push ds
pop es
push dx ; tallennetaan dx stackiin
mov ax,320 ; laitetaan ax:„„n kertomis arvo
imul bx ; kerrotaan 320 x y etta saadaan oikea y kohta
mov bx,ax ; laitetaan bx:„„n tulos
pop dx ; palautetaan dx:„n arvo stackista
add bx,dx ; lisataan x:„n arvo saatuun y:n arvoon
mov ax,0a000h ; laitetaan ax:n nayttomuistin segmenttiosoite
push ds ; tallennetaan datasegmentti
push ax ; laitetaan ax ds:„„n
pop ds ; -------------------
mov cx,16

kakka:
push bx
mov bx,cx
mov al,byte ptr es:[mato+bx-1]
pop bx
push bx
push cx
laskekerros
add bx,cx
sub bx,15
mov byte ptr [bx],al ; laitetaan nayttomuistiin numero uno eli sininen
pop cx
pop bx
loop kakka

pop ds ; palautetaan datasegmentti
endm draw

waitforesc macro
takas:
in al,60h
cmp al,1
je pois
jmp takas
pois:
endm waitforesc

reunat macro
mov cx,319
mov bx,0a000h
push ds
push bx
pop ds
kakkaloop:
mov bx,cx
mov byte ptr [bx],7
loop kakkaloop
pop ds
mov cx,200
mov bx,0a000h
push ds
push bx
pop ds
kakiloop:
mov bx,cx
mov ax,320
dec bx
mul bx
mov bx,ax
mov byte ptr [bx],7
loop kakiloop
pop ds
mov cx,319
mov bx,0a000h
push ds
push bx
pop ds
kikuliloop:
mov bx,cx
add bx,320*199
mov byte ptr [bx],8
loop kikuliloop
pop ds
mov cx,200
mov bx,0a000h
push ds
push bx
pop ds
kakiuloop:
mov bx,cx
mov ax,320
dec bx
mul bx
mov bx,ax
add bx,319
mov byte ptr [bx],8
loop kakiuloop
pop ds
endm reunat

tarkistareunat macro
mov ax,1
cmp x,319
jge hui
cmp x,0
jle hui
cmp y,199
jge hui
cmp y,0
jle hui
jmp kuuppa
hui:
mov ax,0
kuuppa:
endm tarkistareunat

liiku macro
cmp su,1
je vase
cmp su,2
je oike
cmp su,3
je ylo
cmp su,4
je ala
jmp kanalaan
vase:
add x,4
jmp kanalaan
oike:
sub x,4
jmp kanalaan
ylo:
sub y,3
jmp kanalaan
ala:
add y,3
kanalaan:
endm liiku

delay macro
mov cx,summa
kakalooppo:
nop
loop kakalooppo
mov cx,summa
kkakalooppo:
nop
loop kkakalooppo
mov cx,summa
kkkakalooppo:
nop
loop kkkakalooppo
endm delay

tarkistasuunnat macro
in al,60h
cmp al, 72
je ylospain
cmp al, 80
je alaspain
cmp al, 75
je vasepain
cmp al, 77
je oikepain
jmp alapain
ylospain:
cmp su,4
je huu
mov su,3
jmp alapain
alaspain:
cmp su,3
je huu
mov su,4
jmp alapain
vasepain:
cmp su,1
je huu
mov su,2
jmp alapain
oikepain:
cmp su,2
je huu
mov su,1
alapain:
mov ax,1
jmp odut
huu:
mov ax,0
odut:
endm tarkistasuunnat

flush macro
mov ah,0bh
int 21h
cmp al,0ffh
je flushhaa
jmp ksjfkj
flushhaa:
mov ah,7
int 21h
mov ah,0bh
int 21h
cmp al,0
je ksjfkj
jmp flushhaa
ksjfkj:
endm flush

assume ds:@data,cs:@code

.data
mato db 3, 11,11,3
db 11,15,15,11
db 11,15,15,11
db 3, 11,11,3
x dw 100
y dw 100
su db 0 ; 1 = vase 2 = oike 3 = ylo 4 = ala
initmessage db 'Data-segment purified...$'
acti db 'Activating worm-game plus 0.9$'
summa dw 60000
error db 0

.code
mov dx,@data
push dx
pop ds
lea dx,initmessage
mov ah,9
int 21h
lea dx,acti
mov ah,9
int 21h
enter_vga256
reunat


alkuun: ; loopin alku
flush
mov dx,x
mov bx,y
draw
delay
tarkistareunat ; jos ax=1 kaikki ok, jos ax=0, mennaan pois
cmp ax,1
je hyvin
jmp pojjjes
hyvin:
; tarkistaosumat ; jos ax=1 kaikki ok, jos ax=0, menaan kotiin
cmp ax,1
je paremmin
jmp pojjjes
paremmin:
tarkistasuunnat ; jos ax=1 kaikki ok, jos ax=0, menaan kotiin
cmp ax,1
je hyvins
jmp pojjjes
hyvins:
liiku
in al,60h ; loopin loppu
cmp al,1
je pojjjes
jmp alkuun
pojjjes:
enter_text
terminate
end

--
Lars

 

Käyttäjiä lukemassa tätä viestiketjua: 1 (0 jäsentä and 1 vierasta)
 

Pikalinkit


Sivu luotu: 23:14 (GMT +2).