LIST komutu ile başlangıç adresi gizleme
Aslında makina dilini bilenler için etkin bir yöntem olmasada görsel olarak etkileyebiliyor. BASIC içinde bildiğiniz üzere LIST komutu ile programın dökümü elde edilir ki assembler ile kodlanmış bir program ise BASIC ile aktif hale getirilmek istenmişse genelde şu şekilde liste elde edilir.
READY.
LIST <return>
2014 SYS 2064: REM EMARTI.BLOGSPOT.COM
Peki bu komutu kullandıktan sonra sadece şu şekilde görünmesi hoşunuza gitmez miydi?
READY.
LIST <return>
2014 EMARTI.BLOGSPOT.COM
Ve bu RUN komutu verip çalıştırdığınız zaman hiçbir farklılık ile karşılaşmayacağınız bir durum olacak. SYS ile nereye dallanmak istiyorsa oraya gidecek ve makina dili programınızı çalıştıracak.
Kritik nokta ASCII kodlarından $14 (DEL).
Basic'te program yazıp saklamaya başladığınızda, başlangıcı bilindiği üzere $0801'dir (C64'te).
Aşağıdaki örneği derleyin ve çalıştırın, LIST komutu verin. Sonra Monitor programınıza girip M 0801 0840 komutunu verip baytları inceleyin.
; 2014 SYS2080:REM 64738
; 2014 SYS 64738
*=$801
BYTE $1B, $08, $DE, $07, $9E, $32, $30, $38
BYTE $30, $3a, $8f, $14, $14, $14, $14, $14
BYTE $14, $14, $14, $20, $36, $34, $37, $33
BYTE $38, $00, $00, $00
*=$0820
NOP ; No Operation
RTS ; Basic'e dön
Programın başlangıç adresi aslen $0820=2080'tür. Basic'ten SYS 2080 ile çağrılır. Programın dökümünde ise SYS 64738 listelenmektedir. Normalde SYS 64738 yazıp returne basarsanız makina reset atar. Ama böyle görünmesine rağmen RUN ile SYS 2080'e dallanıp program çalışmaktadır.
$0801 - $0802'deki 1b 08 baytları $081b 'ye kadar BASIC satırını okuyacağını belirtir.
$0803 - $0804'deki de 07 baytları BASIC satır numarasını verir. Bu örnekte $07de=2014.
$0805 9E BASIC komut karşılığı SYS'dir.
$0806 32 30 38 30 sıralı baytları ASCII kodlamasıyla SYS'den sonra 2080 yazar
$080A 3a ise : karşılığıdır.
$080B 8f Basic'te REM
$080C'den itibaren başlayan $14'ler ise DEL tuşuna basar işlev görür. Sonrası baytlar 64738 yazar.
8 tane $14 baytı DEL tuşuna 8 kere basılmıştır anlamına gelir SYS sonrasına kadar herşeyi siler görünür. Daha doğrusu BASIC'ten böyle görünür.
Hiç yorum yok:
Yorum Gönder