(VAX, CISC) som kompileras och skapar assembler kod för en helt annan
arkitektur (här Alpha, RISC)?
Källkoden för VAX (VAX Macro-32 assembler), bara 6 instruktioner
förutom assembler direktiv:
Kod: Markera allt
$ type MENABIT.MAR
        .TITLE  MENABIT
        .SBTTL  BIT_TEST
;+
;       Check if bit is set
;-
        .psect  mna$bit_service,exe,nowrt,pic,shr
        .entry  mna$bit_tst,0
        bitl    @4(ap),@8(ap)           ; test bit
        beql    10$
        movl    #-1,r0                  ; set true
        ret
10$:    clrl    r0                      ; set false
        ret
        .end
$Kod: Markera allt
$ d menabit.mar
Directory xxx:[JES]
MENABIT.MAR;2                              1/49          28-AUG-2018 18:34:03.45
Total of 1 file, 1/49 blocks.
$
$ macro /list /machine menabit.mar
$
$ d menabit.*
Directory xxx:[JES]
MENABIT.LIS;1                             11/49          28-AUG-2018 18:39:26.73
MENABIT.MAR;2                              1/49          28-AUG-2018 18:34:03.45
MENABIT.OBJ;1                              1/49          28-AUG-2018 18:39:26.73
Total of 3 files, 13/147 blocks.
$Eftersom det är en RISC så blir det betydligt mer kod:
Kod: Markera allt
MENABIT                         Source Listing                  28-AUG-2018 18:43:05  AMAC V5.0-120-5                   Page 1
                                                                28-AUG-2018 18:34:03  xxx:[JES]MENABIT.MAR;2
                      00000000        1         .TITLE  MENABIT
                      00000000        2         .SBTTL  BIT_TEST
                      00000000        3 ;+
                      00000000        4 ;       Check if bit is set
                      00000000        5 ;-
                      00000000        6         .psect  mna$bit_service,exe,nowrt,pic,shr
                      00000000        7         .entry  mna$bit_tst,0
                      00000002        8         bitl    @4(ap),@8(ap)           ; test bit
                      00000007        9         beql    10$
                      00000009       10         movl    #-1,r0                  ; set true
                      00000010       11         ret
                      00000011       12 10$:    clrl    r0                      ; set false
                      00000013       13         ret
                      00000014       14         .end
MENABIT                         Machine Code Listing            28-AUG-2018 18:43:05  AMAC V5.0-120-5                   Page 2
                                BIT_TEST                        28-AUG-2018 18:34:03  xxx:[JES]MENABIT.MAR;2
                                .PSECT  MNA$BIT_SERVICE, OCTA, PIC, CON, REL, LCL, SHR, EXE, RD, NOWRT
             0000       MNA$BIT_TST::
23DEFFE0     0000               LDA     SP, -32(SP)
B77E0000     0004               STQ     R27, (SP)
B75E0010     0008               STQ     R26, 16(SP)
B7BE0018     000C               STQ     FP, 24(SP)
47FE041D     0010               MOV     SP, FP
             0014       $L1:
201FFFFF     0014               MOV     -1, R0                                                                              ; 000010
A3900000     0018               LDL     R28, (R16)                                                                          ; 000008
A3510000     001C               LDL     R26, (R17)
475C0012     0020               AND     R26, R28, R18
43F20012     0024               SEXTL   R18, R18
E6400009     0028               BEQ     R18, 3_10$                                                                          ; 000009
             002C       $L2:                                                                                                ; 000011
47FD041E     002C               MOV     FP, SP
A79D0010     0030               LDQ     R28, 16(FP)
A7BD0018     0034               LDQ     FP, 24(FP)
23DE0020     0038               LDA     SP, 32(SP)
2FFE0000     003C               UNOP
6BFC8001     0040               RET     R28
2FFE0000     0044               UNOP
2FFE0000     0048               UNOP
2FFE0000     004C               UNOP
             0050       3_10$:                                                                                              ; 000012
47FD041E     0050               MOV     FP, SP                                                                              ; 000011
A79D0010     0054               LDQ     R28, 16(FP)
A7BD0018     0058               LDQ     FP, 24(FP)
47FF0400     005C               CLR     R0                                                                                  ; 000012
23DE0020     0060               LDA     SP, 32(SP)                                                                          ; 000011
6BFC8001     0064               RET     R28
Routine Size: 104 bytes,    Routine Base: MNA$BIT_SERVICE + 0000Denna teknik används för att porta VAX assembler både till Alpha och Intel Itanium.
Och just nu även vid portningen av OpenVMS till "standard" Intel x86-64.
VAX Macro assembler kompileras direkt till Intel X86-64 kod...
Det är en del utmaningar med att t.ex. översätta de fysiska registren mellan
de olika arkitekturerna...
 
				


 
 


 Kul att läsa.
  Kul att läsa.