N88-BASIC、アセンブラ、Cでポインター (1回目)
2023/1/11(水)
N88-BASIC、アセンブラ、Cでポインター (1回目)
C言語にポインターが存在する意味が
文字列中のアルファベットの小文字を
大文字に変換するプログラムを作ることで
何となく分かるようにするシリーズです
今回はN88-BASIC(VL,XL,NL-BASIC)で
普通に作ったプログラムの紹介です
BASICとアセンブラ(Z80)をスルーする方は
4回目(C言語)から見て下さい
blg~.zip中のptr001.basの150行目からです
150 INPUT A$
160 N = LEN(A$)
170 PRINT A$
180 C = ASC("a") - ASC("A")
190 FOR I=1 TO N
200 B$ = MID$(A$, I, 1)
210 IF "a" <= B$ AND B$ <= "z" THEN MID$(A$, I) = CHR$(ASC(B$) - C)
220 NEXT
230 PRINT A$
プログラムと解説を交互に書きました
150 INPUT A$
キーボードから入力した文字列を文字変数A$に入れる
160 N = LEN(A$)
NにA$の文字数を入れる
170 PRINT A$
A$の文字列を表示する
180 C = ASC("a") - ASC("A")
文字a,Aのキャラクターコードの差をCに入れる
190 FOR I=1 TO N
IがNを超えていればNEXTの次に移動(Iは1~)
200 B$ = MID$(A$, I, 1)
B$に「A$の1から数えてI番目の文字1文字」を入れる
210 IF "a" <= B$ AND B$ <= "z" THEN MID$(A$, I) = CHR$(ASC(B$) - C)
B$が"a"~"z"なら"A"~"Z"に替えてA$のI番目に入れる
220 NEXT
Iを1増やしてFORに戻る
230 PRINT A$
A$の文字列を表示する
BASICでは'以降はコメントです
BASICでは変数名の最後で型を表します
A$:文字列、A%:16bits整数、A,A!:32bits実数、A#:64bits実数
(AはDEFINT,DEFSNG,DEFDBLで頭文字指定して型を変更可)
ASC("a")はaのキャラクターコード(&H61)
BASICでは&Hは16進数を表す
CHR$(&H41)でキャラクターコード&H41の文字"A"になる
例
123abc[]を入力したとすると
"1","2"と順番に文字を調べて
"a"~"z"ならキャラクターコードをC(&H20)引いた文字にする
CHR$(ASC("a") - &H20)で"A"になる
これを文字数回繰返す
結果は
123ABC[]
になる
次回から
このプログラムを様々な言語や方法で書いて行きます
N88-BASIC,Z80,C,8086系(386以降)を予定しています
(CはC言語です)
Z80はPC-88またはXL-BASICで動きます
C、インラインアセンブラは、
Cコンパイラーなどを準備しておいて下さい
例、Microsoft Visual Studioなど
windowsのconsoleアプリは実行終了後
ウインドウが閉じてしまうので
最後にキー入力待ちを入れています
使用している入力関数は
Microsoft Visual Studio以外では
代替え関数に変更する必要があるかも
しれませんがご了承下さい
VL,NL,XL-BASIC用のプログラムファイル(例a.bas)
を作る時はメモ帳(名前を付けて保存)などで
ANSIファイルで作成する必要があります
VL,NL,XL-BASICとblg~.zip(ptr001.bas)は
以下のリンクからダウンロードできます
N88-BASIC、アセンブラ、Cでポインター (1回目)
C言語にポインターが存在する意味が
文字列中のアルファベットの小文字を
大文字に変換するプログラムを作ることで
何となく分かるようにするシリーズです
今回はN88-BASIC(VL,XL,NL-BASIC)で
普通に作ったプログラムの紹介です
BASICとアセンブラ(Z80)をスルーする方は
4回目(C言語)から見て下さい
blg~.zip中のptr001.basの150行目からです
150 INPUT A$
160 N = LEN(A$)
170 PRINT A$
180 C = ASC("a") - ASC("A")
190 FOR I=1 TO N
200 B$ = MID$(A$, I, 1)
210 IF "a" <= B$ AND B$ <= "z" THEN MID$(A$, I) = CHR$(ASC(B$) - C)
220 NEXT
230 PRINT A$
プログラムと解説を交互に書きました
150 INPUT A$
キーボードから入力した文字列を文字変数A$に入れる
160 N = LEN(A$)
NにA$の文字数を入れる
170 PRINT A$
A$の文字列を表示する
180 C = ASC("a") - ASC("A")
文字a,Aのキャラクターコードの差をCに入れる
190 FOR I=1 TO N
IがNを超えていればNEXTの次に移動(Iは1~)
200 B$ = MID$(A$, I, 1)
B$に「A$の1から数えてI番目の文字1文字」を入れる
210 IF "a" <= B$ AND B$ <= "z" THEN MID$(A$, I) = CHR$(ASC(B$) - C)
B$が"a"~"z"なら"A"~"Z"に替えてA$のI番目に入れる
220 NEXT
Iを1増やしてFORに戻る
230 PRINT A$
A$の文字列を表示する
BASICでは'以降はコメントです
BASICでは変数名の最後で型を表します
A$:文字列、A%:16bits整数、A,A!:32bits実数、A#:64bits実数
(AはDEFINT,DEFSNG,DEFDBLで頭文字指定して型を変更可)
ASC("a")はaのキャラクターコード(&H61)
BASICでは&Hは16進数を表す
CHR$(&H41)でキャラクターコード&H41の文字"A"になる
例
123abc[]を入力したとすると
"1","2"と順番に文字を調べて
"a"~"z"ならキャラクターコードをC(&H20)引いた文字にする
CHR$(ASC("a") - &H20)で"A"になる
これを文字数回繰返す
結果は
123ABC[]
になる
次回から
このプログラムを様々な言語や方法で書いて行きます
N88-BASIC,Z80,C,8086系(386以降)を予定しています
(CはC言語です)
Z80はPC-88またはXL-BASICで動きます
C、インラインアセンブラは、
Cコンパイラーなどを準備しておいて下さい
例、Microsoft Visual Studioなど
windowsのconsoleアプリは実行終了後
ウインドウが閉じてしまうので
最後にキー入力待ちを入れています
使用している入力関数は
Microsoft Visual Studio以外では
代替え関数に変更する必要があるかも
しれませんがご了承下さい
VL,NL,XL-BASIC用のプログラムファイル(例a.bas)
を作る時はメモ帳(名前を付けて保存)などで
ANSIファイルで作成する必要があります
VL,NL,XL-BASICとblg~.zip(ptr001.bas)は
以下のリンクからダウンロードできます