introduction
Pour la première fois, j'ai entendu le terme "extracode" en relation avec les commandes BESM-6. Maintenant, ce mot n'est pratiquement pas utilisé, le concept le plus proche est "appel système". En raison des particularités du système de commande BESM-6, ces extracodes ressemblaient plus à des instructions intégrées supplémentaires qu'à, par exemple, l'appel d'une fonction dans MS-DOS à l'aide de 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. , , , , .
, , , . , , , , , , , .
. – -, , . – , .
Les extracodes permettent, d'une part, de conserver certaines fonctionnalités de l'architecture du processeur et. ainsi, accroître l'efficacité, notamment en réduisant le nombre d'actions préparatoires. En revanche, lors de la compilation, les extracodes vous permettent de rester à un niveau d'abstraction suffisamment élevé du langage en utilisant des instructions plus complexes (bien qu'implémentées par des sous-programmes) que les instructions de processeur existantes. Dans le même temps, le code généré reste assez compact.