プログラム合成用のエクストラコード

前書き

BESM-6コマンドに関連して「エクストラコード」という用語を初めて聞いた。現在、この単語は実際には使用されていません。最も近い概念は「システムコール」です。BESM-6コマンドシステムの特性により、これらのエクストラコードは、たとえば、INT 21Hを使用してMS-DOSで関数を呼び出すというよりも、実際には追加の組み込み命令のように見えました。





«» : , , , - -. – .. .





, - - . ( ) . , , .





, PL/1 , IA-32, 8086 ( 70- ) , PL/1.





, IA-32. , PL/1 , .





, . , , «-». IA-32 CMPSB, «» . , ( ) REPE CMPSB. :





declare
s1 char(10),
s2 char(15);
if s1>s2 then

BF0A000000          mov    edi,offset S2
B00F                mov    al,15
BE00000000          mov    esi,offset S1
B10A                mov    cl,10
E800000000          call   ?SCCCM
7505                jbe    @1
      
      



? , CMPSB PL/1, . , , , .





CMPSB . , , ? . , . , « », . , , , «12345» «123456», , , .





PL1_CMPSB, , CMPSB, , , AL , , PL/1 .





. PL1_CMPSB , . - ?SCCCM, , (String) (Compare) (har Char), , «» (Memory). , .





, . .





«» – . IA-32, , . , REPE CMPSB, , , ESI, EDI ECX.





, «» , , , . 64- Windows API, RCX, RDX, R8 R9. , ( ) . , , , .





«» – . -« », , , «» (.. ) .





. «» (, ESI EDI), -. ESI EDI . , , . , , (, ), «» .





, – . - EAX , , CMPSB ( ?SCCCM ).





, , , .





, «» , , . , , , , , «inline», .





, , «». , ’ , « » « ». – («-»), – «» (.. «-»). .





«» -.





, -, , (, 8- IEEE-754), 4 , , . , 4 :





declare
(x,y,z) float(53);
z=x/y;             ,   ?FDF_M
z=(x+1)/y;         ,       ?FDF_L
z=x/(y+1);         ,      ?FDF_R
z=(x+1)/(y+1);     ,        ?FDF_S
      
      



, , , ESP (RSP) . . – , . – , .





FPU FPU, . , , ?FDF_S FDIV.





, 4 3 , , – .





, PL/1:





s=substr(s,2); 
      
      



s , , s . – ( ).





declare
s char(*) varying;
s=substr(s,2);

B202                mov    dl,2
BE00000000          mov    esi,offset S
8BFE                mov    edi,esi
E800000000          call   ?VS2AD
E800000000          call   ?SMCVF
      
      



, , , .





, LEA ESI,[ESI+EDX]-1 REP MOVSB , : , PL/1- « » « ».





LEA MOVSB , . , PL/1 , . , .





, . «», ?VS2AD EDI , . ESI, mov edi,offset s mov edi,esi.





?VS2AD ESI ( ) AL ( ), CL=AL. ?SMCVF ESI, EDI CL, , , REP MOVSB.





EDI , ESI CL . . , 19 .





IA-32, LEA «» MOVS. , PL/1. , , .





, «» , , ACOS, . , , , , , «» , «» .





, , «», «».





, , . , , – . , – .





, « », , «» , . «compilatio» - .





, «» - «». , , «» «». , . , «», , , .





«» – . , , «» . .





, , . , :





declare
(x,y,z) fixed(31);
x=y*10-z/4;

6B05040000000A      imul   eax,Y,10
8B1D08000000        mov    ebx,Z
C1FB02              sar    ebx,2
2BC3                sub    eax,ebx
A300000000          mov    X,eax
      
      



, , min max .





CISC-

- RISC- CISC- (.. ).





, , . RISC- , . , , .





– , , CISC-. CISC- CMPSB .





, , , PL1_CMPSB . CISC-, . .. CISC- , RISC-. CISC-.





, . , . , .





. . , FSQRT FPU , (, ). , . , () FSQRT , , , .





, , .





. , , , .





, , , IA-32. , , , , .





, , , . , , , , , , , .





. – -, , . – , .





エクストラコードを使用すると、一方で、プロセッサアーキテクチャの一部の機能を維持できます。したがって、特に準備アクションの数を減らすことによって、効率を高めます。一方、コンパイル時に、エクストラコードを使用すると、実際に存在するプロセッサ命令よりも複雑な命令(サブルーチンを介して実装されますが)を使用して、言語の十分に高いレベルの抽象化を維持できます。同時に、生成されたコードは非常にコンパクトなままです。








All Articles