N88-BASIC、アセンブラ、Cでポインター (3回目)
2023/1/17(火) N88-BASIC、アセンブラ、Cでポインター (3回目) C言語にポインターが存在する意味が 文字列中のアルファベットの小文字を 大文字に変換するプログラムを作ることで 何となく分かるようにするシリーズです 今回は N88-BASIC,Z80(XL-BASIC)で アセンブラ (Z80)を使用したプログラムの紹介です USR関数とCALLの2種類とも書いています アセンブり言語をアセンブラで数値に変換したものが マシン語 (機械語)です 使い方が間違っているかもしれませんが ここではアセンブり言語をアセンブラと書いています NL-BASIC,VL-BASICはアセンブラに対応していないので XL-BASIC(N88-BASIC(PC-8801)+Z80)のみで動きます blg~.zip中のptr003.basです 150 CLEAR ,&HAFFF BASIC使用領域は&HAFFFまで(マシン語は&HB000~) 160 ADDR = &HB000 170 GOSUB *ASSEMBLY マシン語を ADDR番地から読込む 180 DEF USR0 = ADDR '--- USR0 190 STR0 = ADDR + 1 '--- CALL マシン語呼び出しアドレスの設定 (USR0,CALL) 260 B$ = USR0(A$) 330 CALL ALPH(A$) それぞれの方法でマシン語を呼出しています A$自身が書変わります 書換えた後の A$の値がB$に入ります (文字列以外のB = USR0(A)などはAは変化しません) 以下、アセンブラの解説です B$ = USR0(A$)では、DE = VARPTR(A$) CALL STR0(A$)では、HL = VARPTR(A$) の様に、 A$の情報が異なるレジスタに入りますので DEの時はDE,HLを入替えて(EX DE,HL) どちらも HL = VARPTR(A$)の状態で書いています B000: EX DE,HL ;*U0:SWAP HL,DE USR0の時のみ B001: LD B,(HL) ;*C0:B = PEEK(HL) B002: