📄 424dhrys
字号:
// 02e8
// 02e8 ;Int_2_Loc = 3;
60900003 // 02e8 MOV R18,3
2E900045 // 02ec ST R18,R00,Int_2_Loc
// 02f0
// 02f0 ;strcpy(Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
60080144 // 02f0 MOV R01,Str_2_Loc
800001FC // 02f4 CALL strcpy
601001F0 // 02f8 MOV R02,string2
// 02fc
// 02fc ;Enum_Loc = Ident_2;
60900001 // 02fc MOV R18,Ident_2
// 0300 ;D ST R18,R00,Enum_Loc
// 0300
// 0300 ;Bool_Glob = !Func_2 (Str_1_Loc, Str_2_Loc);
60A80124 // 0300 MOV R21,Str_1_Loc
60B00144 // 0304 MOV R22,Str_2_Loc
800001C6 // 0308 CALL Func_2
2E900048 // 030c ST R18,R00,Enum_Loc
// 0310 ;D XOR R10,R23,1
// 0310
// 0310 ;while(Int_1_Loc < Int_2_Loc)
// 0310 ;{
0E900044 // 0310 LD R18,R00,Int_1_Loc
0E980045 // 0314 LD R19,R00,Int_2_Loc
4855C001 // 0318 XOR R10,R23,1
// 031c main_0:
6B048013 // 031c CMP.f R18,R19
FC28000E // 0320 Bge main_1
// 0324
// 0324 ;Int_3_Loc = 5*Int_1_Loc - Int_2_Loc;
50A48002 // 0324 LSL R20,R18,2
// 0328 main_0a:
61A50012 // 0328 ADD R20,R20,R18
69A50013 // 032c SUB R20,R20,R19
2EA00046 // 0330 ST R20,R00,Int_3_Loc
// 0334
// 0334 ;Proc_7(Int_1_Loc, Int_2_Loc, &Int_3_Loc)
61D80012 // 0334 MOV R27,R18
61E00013 // 0338 MOV R28,R19
8000018D // 033c CALL Proc_7
60E80118 // 0340 MOV R29,Int_3_Loc
// 0344
// 0344 ;Int_1_Loc += 1
60948001 // 0344 INC R18
// 0348
6B048013 // 0348 CMP.f R18,R19
FC6FFFF7 // 034c Blt main_0a
50A48002 // 0350 LSL R20,R18,2
2E900044 // 0354 ST R18,R00,Int_1_Loc
// 0358 ;}
// 0358
// 0358 main_1: ;end of while loop
// 0358 ;Proc_8(Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
60A80020 // 0358 MOV R21,Arr_1_Glob
60B01000 // 035c MOV R22,Arr_2_Glob
0EC00046 // 0360 LD R24,R00,Int_3_Loc
80000192 // 0364 CALL Proc_8
61B80012 // 0368 MOV R23,R18
// 036c
// 036c ;Proc_1(Ptr_Glob);
8000011E // 036c CALL Proc_1
61980007 // 0370 MOV R19,R07
// 0374
// 0374 ;for(Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
60780041 // 0374 MOV R15,'A'
// 0378
// 0378 main_2:
6B03C00C // 0378 CMP.f R15,R12
FC300014 // 037c Bgt main_4
// 0380
// 0380 ;{
// 0380 ; if(Enum_Loc == Func_1(Ch_Index, 'C'))
// 0380 ; {
61D8000F // 0380 MOV R27,R15
60E00043 // 0384 MOV R28,'C'
800001BC // 0388 CALL Func_1
0E900048 // 038c LD R18,R00,Enum_Loc
// 0390
6B04801D // 0390 CMP.f R18,R29
FC87FFF9 // 0394 Bne.a main_2
607BC001 // 0398 INC R15 ;...;++Ch_Index)
// 039c
// 039c ;not executed
6008039C // 039c MOV R01,!
FF000000 // 03a0 HALT
// 03a4
// 03a4 ; Proc_6( Ident_1, &Enum_Loc);
60B80000 // 03a4 MOV R23,Ident_1
80000167 // 03a8 CALL Proc_6
60C00120 // 03ac MOV R24,Enum_Loc
// 03b0
// 03b0 ; strcpy( Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
60080144 // 03b0 MOV R01,Str_2_Loc
800001FC // 03b4 CALL strcpy
60100210 // 03b8 MOV R02,string3
// 03bc
// 03bc ; Int_2_Loc = Run_Index;
2E800045 // 03bc ST R16,R00,Int_2_Loc
// 03c0
// 03c0 ; Int_Glob = Run_Index;
61480010 // 03c0 MOV R09,R16
// 03c4 ; }
// 03c4 ;}
// 03c4
// 03c4 ;...;++Ch_Index)
FC7FFFED // 03c4 BT main_2
607BC001 // 03c8 INC R15
// 03cc
// 03cc main_4:
// 03cc ;Int_2_Loc = Int_2_Loc * Int_1_Loc;
0E080045 // 03cc LD R01,R00,Int_2_Loc
80000220 // 03d0 CALL Multiplication
0E100044 // 03d4 LD R02,R00,Int_1_Loc
2E180045 // 03d8 ST R03,R00,Int_2_Loc
// 03dc
// 03dc ;Int_1_Loc = Int_2_Loc / Int_3_Loc;
0E100046 // 03dc LD R02,R00,Int_3_Loc
80000242 // 03e0 CALL Division
61080003 // 03e4 MOV R01,R03
0E900045 // 03e8 LD R18,R00,Int_2_Loc ;Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
0E980046 // 03ec LD R19,R00,Int_3_Loc ;Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
2E180044 // 03f0 ST R03,R00,Int_1_Loc
// 03f4
// 03f4 ;Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
// 03f4 ; LD R18,R00,Int_2_Loc
// 03f4 ; LD R19,R00,Int_3_Loc
69948013 // 03f4 SUB R18,R18,R19
// 03f8 ;MUL R18,R18,7
// 03f8 ;x*7 = x*4 + x*2 + x
509C8002 // 03f8 LSL R19,R18,2
50A48001 // 03fc LSL R20,R18,1
61A50013 // 0400 ADD R20,R20,R19
61948014 // 0404 ADD R18,R18,R20
0E980044 // 0408 LD R19,R00,Int_1_Loc
60D00110 // 040c MOV R26,Int_1_Loc ;Proc_2(&Int_1_Loc);
69948013 // 0410 SUB R18,R18,R19
80000143 // 0414 CALL Proc_2 ;Proc_2(&Int_1_Loc);
2E900045 // 0418 ST R18,R00,Int_2_Loc
// 041c
6B040011 // 041c CMP.f R16,R17
FC6FFFAD // 0420 Blt for_loop_2
60840001 // 0424 INC R16
// 0428
// 0428
// 0428 ;end of main loop
// 0428 end_loop:
2E380002 // 0428 ST R07,R00,Ptr_Glob
2E400003 // 042c ST R08,R00,Next_Ptr_Glob
2E480004 // 0430 ST R09,R00,Int_Glob
2E500005 // 0434 ST R10,R00,Bool_Glob
2E580006 // 0438 ST R11,R00,Ch_1_Glob
2E600007 // 043c ST R12,R00,Ch_2_Glob
// 0440
// 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 0440 ;
// 0440 ; End of time measurement
// 0440 ;
// 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 0440
// 0440 ;This ends time measurement
// 0440 time_off:
FD000004 // 0440 SWI 4 ; DO NOT CHANGE !!!
49000000 // 0444 NOP ; DO NOT CHANGE !!!
0E100095 // 0448 LD R02,R00,Time2
0E180094 // 044c LD R03,R00,Time1
49000000 // 0450 NOP
// 0454 ;Total time: Time3 - Time2 - (Time2 - Time1)
69188003 // 0454 SUB R03,R02,R03
69084002 // 0458 SUB R01,R01,R02
69184003 // 045c SUB R03,R01,R03
// 0460 ;Value in R03
// 0460 ;Value at address Time_result = address $1cc
2E180073 // 0460 ST R03,R00,Time_result
// 0464
// 0464 ;Better control of array element Arr_2_Glog[8][7]
// 0464 ;Store value at position control
60E81000 // 0464 MOV R29,Arr_2_Glob
0EE74197 // 0468 LD R28,R29,8*4*50+4*7
6008046C // 046c MOV R01,!
2EE0005A // 0470 ST R28,R00,Control
// 0474
FF000000 // 0474 HALT
// 0478 ;End of program
// 0478
// 0478
// 0478 ;***********
// 0478 ;Subroutines
// 0478 ;***********
// 0478
// 0478 ;******
// 0478 Proc_1:
// 0478 ;******
// 0478 ; R19: Ptr_Val_Par
// 0478 ; R20: Next_Record
// 0478 ; R21: temp
// 0478 ; R22: RPC
// 0478 ;
EAB04000 // 0478 LRFS R22,RPC
// 047c ;Next_Record = Ptr_Val_Par->Ptr_Comp;
0EA4C000 // 047c LD R20,R19,Ptr_Comp_offset
// 0480
// 0480 ;structassign(*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
61100007 // 0480 MOV R02,R07
61080014 // 0484 MOV R01,R20
80000215 // 0488 CALL structassign
60180030 // 048c MOV R03,size_of_Rec_Type
// 0490
// 0490 ;Ptr_Val_Par->variant.var_1.Int_Comp = 5;
60A80005 // 0490 MOV R21,5
2EACC003 // 0494 ST R21,R19,Int_Comp_offset
// 0498
// 0498 ;Next_Record->variant.var_1.Int_Comp = Ptr_Val_Par->variant.var_1.Int_Comp;
2EAD0003 // 0498 ST R21,R20,Int_Comp_offset
// 049c
// 049c ;Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
0EACC000 // 049c LD R21,R19,Ptr_Comp_offset
60BD0000 // 04a0 ADD R23,R20,Ptr_Comp_Offset ;Proc_3( &Next_Record->Ptr_Comp);
// 04a4 ;D ST R21,R20,Ptr_Comp_offset
// 04a4
// 04a4 ;Proc_3( &Next_Record->Ptr_Comp);
80000152 // 04a4 CALL Proc_3
2EAD0000 // 04a8 ST R21,R20,Ptr_Comp_offset
// 04ac
// 04ac ;if(Next_Record->Discr == Ident_1)
0EAD0001 // 04ac LD R21,R20,Discr_offset
49000000 // 04b0 NOP
6A054000 // 04b4 CMP.f R21,Ident_1
FC00000D // 04b8 Bne Proc_1_1
// 04bc
// 04bc ;{
// 04bc ; Next_Record->variant.var_1.Int_Comp = 6;
60A80006 // 04bc MOV R21,6
2EAD0003 // 04c0 ST R21,R20,Int_Comp_offset
// 04c4
// 04c4 ; Proc_6( Ptr_Val_Par->variant.var_1.Enum_Comp,
// 04c4 ; &Next_Record->variant.var_1.Enum_Comp);
0EBCC002 // 04c4 LD R23,R19,Enum_Comp_offset
80000167 // 04c8 CALL Proc_6
60C50008 // 04cc ADD R24,R20,Enum_Comp_offset
// 04d0
// 04d0 ; Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
0EA9C000 // 04d0 LD R21,R07,Ptr_Comp_offset
0EDD0003 // 04d4 LD R27,R20,Int_Comp_offset
// 04d8 ;v ST R21,R20,Ptr_Comp_offset
// 04d8
// 04d8 ; Proc_7(Next_Record->variant.var_1.Int_Comp, 10,
// 04d8 ; &Next_Record->variant.var_1.Int_Comp);
// 04d8 ;}
// 04d8 ;D LD R27,R20,Int_Comp_offset
60E0000A // 04d8 MOV R28,10
8000018D // 04dc CALL Proc_7
60ED000C // 04e0 ADD R29,R20,Int_Comp_offset
// 04e4
EB000016 // 04e4 RET R22
2EAD0000 // 04e8 ST R21,R20,Ptr_Comp_offset
// 04ec
// 04ec Proc_1_1:
// 04ec ;not executed
600804EC // 04ec MOV R01,!
FF000000 // 04f0 HALT
// 04f4
// 04f4 ;else
// 04f4 ; struct_assign(*Ptr_Val_Par,*Ptr_Val_Par->Ptr_Comp);
61080013 // 04f4 MOV R01,R19
0E14C000 // 04f8 LD R02,R19,Ptr_Comp_offset
80000215 // 04fc CALL structassign
60180030 // 0500 MOV R03,size_of_Rec_Type
// 0504
EB000016 // 0504 RET R22
49000000 // 0508 NOP
// 050c
// 050c ;******
// 050c Proc_2:
// 050c ;******
// 050c ; R26: Int_Par_Ref
// 050c ; R27: Int_Loc
// 050c ; R28: Enum_Loc
// 050c ; R29: temp
// 050c ; R30: RPC
// 050c ;
// 050c ;Int_Loc = *Int_Par_Ref + 10;
0FD8001A // 050c LD R27,R00,R26
EAF04000 // 0510 LRFS R30,RPC
60DEC00A // 0514 ADD R27,R27,10
// 0518
// 0518 proc_2_1:
// 0518 ;do
// 0518 ; if(Ch_1_Glob == 'A')
// 0518 ; {
6A02C041 // 0518 CMP.f R11,'A'
// 051c proc_2_1a:
FC000006 // 051c Bne proc_2_2
49000000 // 0520 NOP
// 0524
// 0524 ; Int_Loc -= 1;
68DEC001 // 0524 DEC R27
// 0528
// 0528 ; *Int_Par_Ref = Int_Loc - Int_Glob;
69EEC009 // 0528 SUB R29,R27,R09
2FE8001A // 052c ST R29,R00,R26
// 0530
// 0530 ; Enum_Loc = Ident_1;
60E00000 // 0530 MOV R28,Ident_1
// 0534 ; }
// 0534
// 0534 proc_2_2:
6A070000 // 0534 CMP.f R28,Ident_1
// 0538 ;while(Enum_Loc != Ident_1);
FC87FFF9 // 0538 Bne.a proc_2_1a
6A02C041 // 053c CMP.f R11,'A'
// 0540
EB00001E // 0540 RET R30
49000000 // 0544 NOP
// 0548
// 0548 ;******
// 0548 Proc_3:
// 0548 ;******
// 0548 ; R23: Ptr_Ref_Par
// 0548 ; R24: temp1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -