📄 objmacs.s
字号:
MACRO Push $Regs, $Base LCLS BaseReg [ "$Base" = ""BaseReg SETS "sp" |BaseReg SETS "$Base" ] [ LDM_MAX < 16 LCLA n LCLA r LCLS s LCLS subs LCLS chs SETS "$Regs"n SETA :LEN:ssubs SETS ""r SETA 0 WHILE n<>0n SETA n-1ch SETS s:RIGHT:1s SETS s:LEFT:n [ ch = ","r SETA r+1 [ r >= LDM_MAX [ {CONFIG} = 16 PUSH {$subs} | STMFD $BaseReg!,{$subs} ]subs SETS ""r SETA 0 |subs SETS ch:CC:subs ] | [ ch = "-" ! 1, "Can't handle register list including '-'" |subs SETS ch:CC:subs ] ] WEND [ {CONFIG} = 16 PUSH {$subs} | STMFD $BaseReg!,{$subs} ] | [ {CONFIG} = 16 PUSH {$Regs} | STMFD $BaseReg!, {$Regs} ] ] MEND MACRO FunctionEntry $UsesSb, $SaveList, $MakeFrame [ {CONFIG} = 16 [ "$UsesSb" <> "" ! 1, "Cannot use SB in 16 bit code" ] [ "$MakeFrame" <> "" ! 1, "Cannot make frame in 16 bit code" ] ] LCLS Temps LCLS TempsCTemps SETS "$SaveList"TempsC SETS "" [ Temps <> ""TempsC SETS Temps :CC: "," ] [ "$UsesSb" <> "" :LAND: make="shared-library" [ "$MakeFrame" = "" MOV ip, sb ; intra-link-unit entry Push "$TempsC.sb,lr" MOV sb, ip | MOV ip, sb ; intra-link-unit entry Push "sp,lr,pc" ADD lr, sp, #8 Push "$TempsC.sb,fp" MOV fp, lr MOV sb, ip ] | [ "$MakeFrame" = "" Push "$TempsC.lr" | MOV ip, sp Push "$TempsC.fp,ip,lr,pc" SUB fp, ip, #4 ] ] MEND GBLA V_N [ INTERWORK :LOR: THUMB MACRO$label VEnter_16 ; Like VEnter, but declare __16$label as the CODE16 ; THUMB entry point__16$label BX pc CODE32$label STMFD r13!,veneer_s ; ARM is the declared entry point MEND MACRO$label VEnter ; Declare the THUMB entry point as the main CODE16 ; entry point$label BX pc CODE32__32$label ; Declare a __32$label entry point for ARM STMFD r13!,veneer_s MEND MACRO$label VReturn $cc$label LDM$cc.FD r13!,veneer_s BX$cc lr MEND MACRO$label VPull $cc$label LDM$cc.FD r13!,veneer_s MEND MACRO$label ReturnToLR $cc$label BX$cc lr MEND MACRO$label ReturnToLR_flg $cc$label BX$cc lr MEND MACRO$label ReturnToStack $cc$label LDM$cc.FD sp!,{lr} BX$cc lr MEND MACRO$label PullFromStack $cc$label LDM$cc.FD sp!,{lr} MEND MACRO$label EnterWithLR_16 [ "$label" <> "" EXPORT __16$label EXPORT $label ] CODE16__16$label BX pc CODE32$label MEND MACRO$label EnterWithLR_Thumb [ "$label" <> "" EXPORT __16$label ] [ INTERWORK ; must create ARM interworking veneer CODE32 EXPORT $label$label ADR ip, __16$label + 1 BX ip ] CODE16__16$label MEND MACRO$label EnterWithStack_16 [ "$label" <> "" EXPORT __16$label EXPORT $label ] CODE16__16$label BX pc CODE32$label STMFD sp!,{lr} MEND MACRO$label EnterWithLR [ "$label" <> "" EXPORT __32$label EXPORT $label ] CODE16$label BX pc CODE32__32$label MEND MACRO$label EnterWithStack [ "$label" <> "" EXPORT __32$label EXPORT $label ] CODE16$label BX pc CODE32__32$label STMFD sp!,{lr} MEND MACRO Export $name EXPORT $name EXPORT __16$name MEND MACRO Export_32 $name EXPORT __32$name EXPORT $name MEND MACRO Import_32 $name IMPORT __32$name MEND MACRO$label B_32 $name$label B __32$name MEND |;ARM 32 and 26-bit mode MACRO$label VEnter_16$label STMFD r13!,veneer_s MEND MACRO$label VEnter$label STMFD r13!,veneer_s MEND MACRO$label VReturn $cc$label [ INTERWORK LDM$cc.FD r13!,veneer_s BX$cc lr | [ {CONFIG} = 32 LDM$cc.FD r13!,veneer_l ] [ {CONFIG} = 26 LDM$cc.FD r13!,veneer_l^ ] ] MEND MACRO$label VPull $cc$label LDM$cc.FD r13!,veneer_s MEND MACRO$label ReturnToLR $cc$label [ INTERWORK BX$cc lr | [ {CONFIG} = 32 MOV$cc pc,lr ] [ {CONFIG} = 26 MOV$cc.S pc,lr ] ] MEND MACRO$label ReturnToLR_flg $cc$label [ INTERWORK BX$cc lr | MOV$cc pc,lr ] MEND MACRO$label ReturnToStack $cc$label [ INTERWORK LDM$cc.FD sp!,{lr} BX$cc lr | [ {CONFIG} = 32 LDM$cc.FD sp!,{pc} ] [ {CONFIG} = 26 LDM$cc.FD sp!,{pc}^ ] ] MEND MACRO$label PullFromStack $cc$label LDM$cc.FD sp!,{lr} MEND MACRO$label EnterWithLR_16 EXPORT $label$label MEND MACRO$label EnterWithStack_16 EXPORT $label$label STMFD sp!,{lr} MEND MACRO$label EnterWithLR EXPORT $label$label MEND MACRO$label EnterWithStack EXPORT $label$label STMFD sp!,{lr} MEND MACRO Export $name EXPORT $name MEND MACRO Export_32 $name EXPORT $name MEND MACRO Import_32 $name IMPORT $name MEND MACRO$label B_32 $name$label B $name MEND ] MACRO DataArea AREA |C$$data|, DATA MEND [ make <> "shared-library" MACRO CodeArea $name [ INTERWORK AREA |C$$code|, CODE, READONLY, INTERWORK | AREA |C$$code|, CODE, READONLY ] MEND MACRO LoadStaticAddress $Addr, $Reg, $Ignore LDR $Reg, =$Addr MEND MACRO LoadStaticBase $Reg, $Ignore LoadStaticAddress StaticData, $Reg, $Ignore MEND MACRO AdconTable MEND MACRO Function $name, $type ; should be ARMFunction... LCLS TempsTemps SETS VBar:CC:"$name":CC:VBar EXPORT $Temps ; oops, forgot to check $type... [ THUMB :LAND: {CONFIG} <> 16 CODE16$Temps BX pc CODE32; If we are *NOT* building an interworking library we must set bit 0 of lr; as the caller will not have done it for us. [ :LNOT:INTERWORK ORR lr, lr, #1 ] |$Temps ] MEND | MACRO CodeArea $name AREA |C$$code|, CODE, READONLY, REENTRANT, PIC MEND MACRO AdconTable AREA |sb$$adcons|, DATA, READONLY, BASED sb MEND MACRO Function $name, $type LCLS TempsTemps SETS VBar:CC:"$name":CC:VBar [ "$type" = "" EXPORT $Temps | EXPORT $Temps[$type] ]$Temps MEND ] MACRO CODE_32 [ {CONFIG} = 16 CODE32 ] MEND MACRO CODE_16 [ {CONFIG} <> 16 CODE16 ] MEND END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -