MIPS рдЕрд╕реЗрдВрдмрд▓рд░ рд╕реАрдЦрдирд╛



рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, MIPS рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИ рдЬрд┐рд╕реЗ MIPS рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд┐рд╕реНрдЯрдо (рд╡рд░реНрддрдорд╛рди рдореЗрдВ MIPS рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ) рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ 1985 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 3 рдбреА-рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рддреЗрдЬреА рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдЧрдгрдирд╛ред рд╕рд┐рд╕реНрдХреЛ рдФрд░ рдорд┐рдХрд░реЛрдЯрд┐рдХ рд░рд╛рдЙрдЯрд░, рд╕реНрдорд╛рд░реНрдЯрдлреЛрди, рдЯреИрдмрд▓реЗрдЯ рдФрд░ рдЧреЗрдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

MIPS рдирд┐рд░реНрджреЗрд╢ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЗрд╕ рд╕реЗ рд╣реИ рдХрд┐ рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред

MIPS рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрд░рдЪрдирд╛


рдпрд╣ рдХреНрд▓рд╛рд╕рд┐рдХ MIPS рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдм рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ рд╣реИ ред .data рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрд░реНрде рд╣реИ рдбреЗрдЯрд╛ рдЦрдВрдб рдХреА рд╢реБрд░реБрдЖрдд, .text - рдХреЛрдб рдЦрдВрдб рдХреА рд╢реБрд░реБрдЖрддред
рд╕рднреА рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдмрд▓ ( v: main: loop: рдФрд░ endloop: ред
# рдЪрд┐рд╣реНрди рдХреЗ рдмрд╛рдж рд╕рднреА рдкрд╛рда рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВ ред
рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдЫрджреНрдо- рдирд┐рд░реНрджреЗрд╢ (рдореИрдХреНрд░реЛрдЬрд╝) рд╣реИред

 .data v: .word -1, -2, -3, -4, -5, -6, -7, -8, -9, -10 .text .globl main main: li $t0, 0 # $t0 = 0 (variable a) li $t1, 0 # $t1 = 0 (counter i) li $t2, 10 # $t2 = 10 (count limit l) loop: slt $t3, $t1, $t2 beq $t3, $zero, endloop la $t3, V sll $t4, $t1, 2 addu $t3, $t3, $t4 lw $t3, 0($t3) addu $t0, $t0, $t3 addiu $t1, $t1, 1 b loop endloop: 


MIPS рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдкреНрд░рдХрд╛рд░


рдпрд╣рд╛рдБ C ++ рдФрд░ MIPS рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:
C ++ рдФрд░ MIPS рдореЗрдВ рддреБрд▓рдирд╛ рдЪрд╛рд░реНрдЯ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдордЖрдЗрдкреА рдореЗрдВ рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╕рдВрдж рдХреЗрд╡рд▓ рдЙрд╕ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬреЛ рдЗрд╕ рдЪрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░реЗрдЧреАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ MIPS рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдмрд▓ (рд╡рд░реНрдг)


рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдордиреЗ рдХрдИ рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд▓реЗрдмрд▓ (рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреАрдХ рдпрд╛ рд▓реЗрдмрд▓ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрддреЛрдВ рдХреЛ "рдирд╛рдо" рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рд╡рд░реНрдгреЛрдВ рдХреЛ 2 рдмрдбрд╝реЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдбреЗрдЯрд╛ рд▓реЗрдмрд▓ (рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдкрддреЗ рдЬреЛ рдХрд┐ .data рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ v: рдФрд░ рдирд┐рд░реНрджреЗрд╢ рд▓реЗрдмрд▓ ( .text рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдкрддреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП main: loop: ред
.Data рдЕрдиреБрднрд╛рдЧ рдореЗрдВ .data рдЖрдорддреМрд░ рдкрд░ рдкрддрд╛ 0x10010000 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢ 0x00400000 рдкрддреЗ рдкрд░ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ MIPS рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ 32 рдмрд┐рдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрди рд▓реЗрдмрд▓-рдкрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдЧреА:
рддрд╛рд▓рд┐рдХрд╛ & quot; рд▓реЗрдмрд▓ рдкрддрд╛ & quot;
рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдФрд░ рдбреЗрдЯрд╛ рд╕реЗ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред

рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢


рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ .data рдФрд░ .text , рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╣реИред рдЖрдЗрдП рдмрд╛рдХреА MIPS рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

рдЕрдВрддрд┐рдо рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: .align 1 рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ .align 1 рд▓рд┐рдЦрд╛ рд╣реИ .align 1 рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рднрд▓реЗ рд╣реА рд╣рдо рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0x10010000 рдкрддреЗ рдХреЗ рд▓рд┐рдП 1 рдмрд╛рдЗрдЯ рдХреЗ рдХреБрдЫ рдореВрд▓реНрдп, рдЕрдЧрд▓реЗ рдмрд╛рдЗрдЯ рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрджрд┐ рд╣рдо рдореЗрдореЛрд░реА рдХреЛ рдПрдХ рдФрд░ рдмрд╛рдЗрдЯ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ 0x10010002 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред MIPS рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░реЗрдЦрдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╕рдо рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ (0x10010000, 0x10010002, рд▓реЗрдХрд┐рди 0x10010003 рдирд╣реАрдВ) рдХреЗ рд▓рд┐рдП 16-рдмрд┐рдЯ рдорд╛рди ( .half ) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, 32-рдмрд┐рдЯ рдХреЗрд╡рд▓ рдПрдХ рдкрддреЗ рдкрд░ рдЬреЛ рдХрд┐ 4 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди 64 рд╣реИред -рдмрд┐рдЯ - рдХреЗрд╡рд▓ 8 рдХреЗ рдкрддреЗ рдХреЗ рд▓рд┐рдПред

рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк .data


рдбреЗрдЯрд╛ .data рдХрд╛рдлреА рдореБрдХреНрдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд▓реЗрдмрд▓, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдореЗрдВ рд╕рд╣реА рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

 .data var1: .byte 'A', 0xF3, 127, -1, '\n' var2: .half -10, 0xffff var3: .word 0x12345678 var4: .float 12.3, -0.1 var5: .double 1.5e-10 var6: .dword 0x1234567812345678 str1: .ascii тАЬi love mips\n" str2: .asciiz тАЬzero-finished string" array: .space 100 


рдЬреИрд╕реЗ рд╣реА рд╡реЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рджреЗрдЦреЗрдВрдЧреЗред

рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ


MIPS рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИред рдорд╛рдирдХ рдПрдордЖрдЗрдкреАрдПрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ 32 рдореБрдЦреНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдХреЙрдкреАрдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ 32 рдЕрдзрд┐рдХ - рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬреЛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдХреНрд░рдорд╢рдГ 32 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЯрд╛рдЗрдк int рдХрд╛ рдПрдХ рдПрдХрд▓ рдорд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП long рдЖрдкрдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдЙрд╕рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдорд╛рдирд╡-рдкрдардиреАрдп рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:


MIPS рдирд┐рд░реНрджреЗрд╢


рдиреЛрдЯред рдЕрдм рд╕реЗ, рд╣рдо MIPS рдкреНрд░реЛрд╕реЗрд╕рд░, рдЗрд╕рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдРрдб-рдСрди рдХреЛ MARS рдирд╛рдордХ рдЕрджреНрднреБрдд MIPS рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ MIPS рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╛рд▓рди рд╣реИред

рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЛрдб рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рдЧреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдЫрджреНрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЯрд┐рдкреНрдкрдгреА, рдкреНрд░рддреАрдХ (рд▓реЗрдмрд▓) рдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдЫрджреНрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдореИрдХреНрд░реЛрдЬрд╝ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдереВрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 la rdest, addr 
рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕реЗрдЯ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ:

 lui $at, hi(addr) ori rdest, $at, lo(addr) 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдордЖрдЗрдкреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░


MIPS рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рддреАрди рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:


рдХреЙрдкреЛрд░реЛрд╕реЗрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдмрд╛рдж рдореЗрдВ рдЙрдирдХреА рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

Syscall рдирд┐рд░реНрджреЗрд╢


syscall рд╕рдмрд╕реЗ рд╕рд░рд▓ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг MIPS рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рдПрдХ рд╕реЗрд╡рд╛ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред syscall рдЙрдкрдпреЛрдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЦреБрдж рд╣реА рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рди рд╣реЛред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╕реЗрд╡рд╛ рдХреЛрдб рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ $ v0 - 1 рд╕реЗ 12. рддрдХ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛ред рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХреЛрдбреНрд╕ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдПрдХреНрд╢рди рдХреА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ, рдЬреЛ MARS рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ:

Syscall рддрд╛рд▓рд┐рдХрд╛

рд╕рднреА рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ MARS рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢


рддреЛ, рдЖрдЗрдП рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдХреБрдЫ рд╕рдВрдХреНрд╖рд┐рдкреНрддрд╛рдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: rd рд╡рд╣ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ рдЬрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, rs рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╣реИ, rt рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╣реИред рддреБрдо рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ imm16 , рдПрдХ 16-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ, рдпрд╛ imm5 , рдПрдХ 5-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХред


рд╡реИрд╕реЗ, imm16 рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 addiu $s1, $zero, 0xFFFF # $s1 = 0x0000FFFF ( ) 

рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 addiu $s1, $zero, -0xFFFF # $s1 = 0xFFFF0001 (     2) 


рдЖрдЗрдП рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛рдУрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб (C ++ рдореЗрдВ) рд▓реЗрдВ:
int f = (g+h) - (ij);
рдФрд░ рдЗрд╕ рдХреЛрдб рдХрд╛ MIPS рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ '=' рдЪрд┐рд╣реНрди рдХреЗ рджрд╛рдИрдВ рдУрд░ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЪрд░ f рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЪрд░ рдЪ $ s0, g рдореЗрдВ $ s1, h рдореЗрдВ $ s2, i рдореЗрдВ $ s3, рдФрд░ j рдореЗрдВ $ s4 рдореЗрдВ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

 addu $t0, $s1, $s2 # t0 = s1 + s2 = g + h subu $t1, $s3, $s4 # t1 = s3 - s4 = i - j subu $s0, $t0, $t1 # s0 = f = t0 - t1 = (g+h) - (ij) 


рдФрд░ рдЕрдм рдЖрдк MARS рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреНрд░рд╛рдлрд╝реНрдЯ рдХреЛ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ MARS рдореЗрдВ рдЦреЛрд▓реЗрдВ:
 java -jar Mars_4_2.jar 

рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрдЬрд╛рдп рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред рдЕрдм рдЖрдк рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд░рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ -> рдЗрдХрдЯреНрдард╛:

рдорд╛рд░реНрд╕ рдЕрд╕реЗрдВрдмрд▓ рдСрдкрд░реЗрд╢рди

рдЕрдм рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рджрд╢рдорд▓рд╡ рдорд╛рди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП Hexadecimal рдорд╛рди рдХреЛ рдЕрдирдЪреЗрдХ рдХрд░реЗрдВ, рдФрд░ Run -> Go рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:

MARS рд░рди рд╕рдВрдЪрд╛рд▓рди

рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж $ s0 рдореЗрдВ рдорд╛рди 12 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рд░рдЬрд┐рд╕реНрдЯрд░

рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП


рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдЧреБрдгрди рдФрд░ рд╡рд┐рднрд╛рдЬрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдореЗрдВ, рд╣рдо рдореЗрдореЛрд░реА рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдмреАрдЪ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк MIPS рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
 int a = b + c; int d = e + f; int g = a + b; int h = g + d; 

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/In147685/


All Articles