Códigos extra para síntesis de programas

Introducción

Por primera vez escuché el término "extracode" en relación con los comandos BESM-6. Ahora bien, esta palabra prácticamente no se usa, el concepto más cercano es "llamada al sistema". Debido a las peculiaridades del sistema de comandos BESM-6, esos extracódigos realmente parecían más instrucciones incorporadas adicionales que, por ejemplo, llamar a una función en MS-DOS usando INT 21H.





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





, - - . ( ) . , , .





, 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. , , , , .





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





. – -, , . – , .





Los extracodes permiten, por un lado, preservar algunas características de la arquitectura del procesador y. así, aumentar la eficiencia, especialmente al reducir el número de acciones preparatorias. Por otro lado, al compilar, los extracódigos le permiten permanecer en un nivel suficientemente alto de abstracción del lenguaje mediante el uso de instrucciones más complejas (aunque implementadas a través de subrutinas) que las instrucciones del procesador realmente existentes. Al mismo tiempo, el código generado sigue siendo bastante compacto.








All Articles