N88-BASIC、アセンブラ、Cでポインター (6回目)
![イメージ](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV6lYLIywJRwk9z16MgJP0-x8TSKF48O67Iw4HLAyPt3VGdbOJzgPvNlqRFpfeFZtvzvgw4Kk2JaFFWPIzvaxQwyYQtfN58NZs3zaww8Kw7lJmY5LGZIlLcftMskMQNhDBb8EDZ4O1kndl8Imad0cuVhPReKEW2npUW_ysL35yYE3NBmVrc3rNiU3o/w400-h224/ptr004.jpg)
2023/1/31(火) N88-BASIC、アセンブラ、Cでポインター (6回目) C言語にポインターが存在する意味が 文字列中のアルファベットの小文字を 大文字に変換するプログラムを作ることで 何となく分かるようにするシリーズです 今回はアセンブラ(8086系)の プログラムの紹介です 前回のポインターを使用したCからの変換です プログラムと解説はコメント(/* … */)を見て下さい blg~.zip中のptr006asm.cです #include <stdio.h> /* printf等使用の為 */ void main( void ) /* mainから実行 */ { c har * p; /* p = a (aは&a[0]) */ char a[256]; /* 255文字+終端'\0' */ printf( "? " ); gets_s(a, 256); /* 文字列入力 */ printf( "%s\n" , a); /* 文字列表示 */ p = a; /* mov ebx,aがerrorの為 */ __asm /* 次の{}内がアセンブラ */ { mov ebx,p; ; ebxレジスタ(32bit) = p L1: mov al,[ebx] ; alレジスタ(8bit) = *ebx test al,al ; al & al (0のチェック) je L3 ; if (al == 0 ) goto L3 cmp al, 'a' ; if (al < 'a' ) goto L2 jl L2 cmp al, 'z' ; if (al > 'z' ) goto L2 jg L2 sub al, 'a' - 'A' ;