[SAMPLE46_2] SAMPLE
関数 [USR] を参照して下さい。
尚[USR] での引数の扱いは定数で引き渡しです。
[CALL] 命令での引数はアドレスで引き渡しです。定数は使用出来ません。
10 'SAMPLE 46_2 CHAR TREATMENT, INTEGER TREATMENT
20 DEF SEG=DEFUSER:M%=0:M2%=&H100
30 DEF USR0=M%:DEF USR1=M2%+&H1000
40 BLOAD "CHAARRANGE_CORE.EXE",M%
42 BLOAD "INTTRAETMENT_CORE.EXE",M2%
45 A$="ABWZ1234":B$=USR0(A$)
60 PRINT A$;" この文字列を逆に並び替えます---> ";B$
70 C%=37:D%=USR1(C%)
80 PRINT:PRINT "C%=";C%;" --->[C%*5/2+7]/3を計算します。";D%
USR0は文字列型の引数で、この文字列を逆並びに変えて返します。
USR1は整数型の引数で、整数型の算術演算結果を返します。
整数の算術演算は8086プロセッサーだけの演算だけですので、
8087プロセッサーとのLink操作は無用です。
"CHAARRANGE.EXE"はVisua;StudioでCompileしたCプログラムの実行部だけを、
取り出したものです。
文字列を逆並びに変えて、返します。
/************************* Start of MAIN-C.C *************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
#ifdef __STDC__
#else
#endif
void main( )
{
_asm {
CMP CL,3;
JNZ last;
MOV ESI,EBX;
MOV ECX,0;
MOV CL,[ESI];
MOV EDI,EBX;
MOV EDI,4[EDI]
MOV ESI,EDI;
ADD ESI,ECX;
DEC ESI;
comeback2:
MOV AH,[EDI];
MOV AL,[ESI];
MOV [EDI],AL;
MOV [ESI],AH;
DEC ESI;
INC EDI;
CMP EDI,ESI;
JB comeback2;
last:
MOV CL,3;
}
return ;
}
/************************** End of MAIN-C.C **************************/
"f:\INTTRAETMENT_CORE.EXE"はVisua;StudioでCompileしたCプログラムの実行部だけを、
取り出したものです。
整数の演算結果を返します。
/************************* Start of MAIN-C.C *************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
#ifdef __STDC__
#else
#endif
void main( )
{
short *ii1,i1,i2;
_asm {
PUSH ECX;
CMP CL,2;
JNZ last;
MOV ESI,EBX;
MOV ii1,ESI;
}
i1=*ii1;
i2=(i1*5/2+7)/3;
*ii1=i2;
last:
_asm {
POP ECX;
}
return ;
}
/************************** End of MAIN-C.C **************************/