Introduction
For the first time I heard the term "extracode" in relation to the BESM-6 commands. Now this word is practically not used, the closest concept is "system call". Due to the peculiarities of the BESM-6 command system, those extracodes really looked more like additional built-in instructions than, for example, calling a function in MS-DOS using 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. , , , , .
, , , . , , , , , , , .
. – -, , . – , .
Extracodes allow, on the one hand, to preserve some features of the processor architecture and. thus, increase efficiency, especially by reducing the number of preparatory actions. On the other hand, during compilation, extracodes allow you to remain at a sufficiently high level of abstraction of the language due to the use of more complex instructions (albeit implemented through subroutines) than actually existing processor instructions. At the same time, the generated code remains quite compact.