@juen, post #28
; Przykład: movea.w #-512,a0 move.b (a1,a0.w),d0
@juen, post #28
@Don_Adan, post #32
@siudym, post #30
@Don_Adan, post #32
@siudym, post #33
@juen, post #38
constant: equ $80 ; zdefiniowana stała o wartości #$80 constant: dc.b 1,$80 ; zdefiniowana stała 1 bajt o wartości #$80 variable: ds.b 1 ; zdefiniowana zmienna 1 bajt w RAM initialized variable: dc.b 1,$80 ; zdefiniowana zmienna 1 bajt w RAM o wartości #$80 (lub stała)
@siudym, post #39
@juen, post #35
co do zmiennej - nie ma czegoś takiego w assemblerze. jest po prostu dana która jest pod jakimś adresem pamięci więc mamy jej adres i to co jest pod jej adresem i do rozróżnienia tego używamy #
score equr d0 ; d0.w: score check_score: cmp.w hiscore(pc),score ble.s .skip move.w score,hiscore .skip: rts hiscore: dc.w 0
string equr a0 len equr d0 strlen macro moveq #-1,len \@next_char: addq.l #1,len tst.b (string)+ bne.s \@next_char endm print macro move.l stdout(pc),d1 move.l string,d2 move.l len,d3 movea.l dosbase(pc),a6 jsr _LVOWrite(a6) endm program: lea text(pc),string strlen print lea text2(pc),string strlen print rts dosbase: dc.l 0 stdout: dc.l 0 text: dc.b "Hello world",0 text2: dc.b "Mój program w asemblerze!",0
@Hexmage960, post #41
RSSET 0x00FF0000 ; Map from start of RAM ram_sprite_pos_x rs.w 1 ; Sprite x pos (word) ram_sprite_pos_y rs.w 1 ; Sprite y pos (word)
@juen, post #46
rsreset val: rs.w 1 val2: rs.w 2 size: rs.w 0
@juen, post #38
@Hexmage960, post #47
Służy do tworzenia definicji struktur.
RSSET $dff000 bltddat rs.w 1 dmaconr rs.w 1 start move.w dmaconr,d0 ;wynik --> move.w $dff002,d0
rsset 0
screen: rs.l 1
copper: rs.l 1
sizeOf: rs.b 0 ; koniec
lea dt,a4
; oczywiście trzeba zainicjować (move.l #$20000,screen(a4), move.l #$10000,copper(a4)
move.l screen(a4),a0 ; zamiast move.l screen,a0
movel copper(a4),$dff080 ; zamiast move.l copper,$dff080
rts
SECTION dane,BSS_P
dt: ds.b sizeOf
@asman, post #51
Dyrektywa rs jest bardzo elastyczna. W przykładzie z postu #44 mamy użyty rsset, dzięki temu możemy zdefiniować adres (który to jest tak po prawdzie przesunięciem :D ). W naszych amigowych warunkach możemy sami sobie zrobić na przykład coś takiego.
lea $dff000,a4 move.w dmaconr(a4),d0
Dodam (na marginesie), że jeśli ktoś chce być bardzo koszerny, to może definiować struktury za pomocą makr w exec/types.i, które to za pomocą dyrektyw equ i set, tworzą odpowiednie przesunięcia. To chyba jest łatwiejsze dla zwolenników języka C.
@asman, post #51
@siudym, post #53
;--- lea plik(pc),a0 move.l #$00FF8000,a1 move.w #2048-1,d0 loop: move.b (a0)+,(a1) addq.w #2,a1 dbf d0,loop rts plik: incbin "df0:plik.bin"
@siudym, post #53
lea plik(pc),a0 move.l #$00FF8000,a1 move.w #2048-1,d0 moveq #0,d1 loop: move.b (a0)+,d1 move.w d1,(a1)+ dbf d0,loop rts plik: incbin "df0:plik.bin"
@siudym, post #1
@siudym, post #53
lea plik(pc),a0 move.l #$00FF8000,a1 move.w #2048/4-1,d0 loop: move.l (a0)+,d1 movep.l d1,1(a1) addq.l #8,A1 dbf d0,loop rts plik: incbin "df0:plik.bin"
@juen, post #59