Çoğu zaman registerlerin tümünün kaydedilmesi ve tekrar geri çağrılması gereksinimi vardır. Basit bir program kodu ile nasıl yapıldığını kodlayalım. Program çalışma zamanında LMB(Left Mouse Button)'a basılana kadar bekler.
;lmb.asm
start:
movem.l d0-d7/a0-a6,-(a7) ; tüm registerleri kaydet
dongu:
btst #$06, $bfe001 ; $bfe001 adresinin 6. bitini LMB için kontrol et
bne.s loop ; set ise dongu labeline git
movem.l (a7)+,d0-d7/a0-a6 ; kaydedilmiş registerleri geri çağır
rts
ASM-Pro'da editor kısmında programı kodladıktan sonra ESC ile çıkıyoruz. W Works:lmb.asm olarak harddiske kaydettim. Sonra ayrı ayrı a ve j komutlarını yazarak entere bastım. Program kodlamada hata yapmadıysanız hatasız çalışır ve LMB'na basmanızı bekler durumdadır. Programı dissamble etmek için @dstart komutu yazın. Ayrıca start labelinin adresini bulmak için ?start komutunu kullanabilirsiniz.
18 Ekim 2014 Cumartesi
17 Ekim 2014 Cuma
Sistem Durum Flagları ve Dallanma Komutları
Asm-One 1.44 sürümünü kullanmayı uygun gördüm. Aminet'ten aratıp indirebilirsiniz.
![]() |
| flag.asm |
;Karsilastirma sonrasi sistem durum flaglarinin durumu ve
;dallanmalarina iliskin ornekler
move.b #$18, d0
cmp.b #$28, d0
beq.b l0001
; d0 #$28 ile karsilastirilirsa
; esit oldugundan
; z=1 n=0 c=0 flag
; beq ile l0001'e dallanir
bmi.b l0002
bpl.b l0003
; bcc.b l0002
; bcs.b l0003
rts
l0001:
move.b #$99, result
rts
l0002:
move.b #$9a, result
rts
l0003:
move.b #$9b, result
rts
result: dc.b $00
Yukarıdaki örnekten yola çıkarsak;
D0 data registerine değer vermek için
move.b #$28, D0
komutu kullanıldı. Değer ile oynayarak debuggerda ilgili flag değişimleri incelenebilir.
D0 data registerinin değeri #$28 değeri ile karşılaştırıldığındaki flagların durumlarına göre ilgili labele dallanmasını inceleyelim
Eğer D0 data registeri $28'e eşitse Z=1 olur. Z=1 ise BEQ ile başlayan dallanma komutunun gösterdiği labele gider
Eğer D0 data registeri $28'den küçük bir değer ise, N ve C flagları 1 olur. C=1 olduğundan BCS ile başlayan dallanma komutunun gösterdiği labele gider. N=1 olduğundan BMI ile karşılaşsaydı bu komuta ait labele gidecekti.
Eğer D0 data registeri $28'den büyük bir değer ise hiçbir flag set olmaz. BPL veya BCC komutu ile başlayan labele dallanma olur.
68K Assembler Giriş
Bir 68000 işlemci kalmıştı öğrenmedik. Sırf meraktan dolayı daldım içeri çıkabilir miyim dışarı bilmiyorum. 68K için assembler öğretmeye değil kendimce aldığım notları blog sitesine yazmaya karar verdim. Hem derli toplu dursun hem de belki birileri faydalanır mantığı ile. Hadi hayırlısı başladık bir işe; devamı gelir inşallah!
Kaydol:
Yorumlar (Atom)
