150 likes | 323 Views
Writing an Assembly-language program. MIPS assembly language using MARS: MIPS A ssembler and R untime S imulator. The MARS Assembler. …is a modern, “single pass” Assembler Converts mnemonics to machine instructions ( opcodes + operands)
E N D
Writing an Assembly-language program MIPS assembly language using MARS: MIPS Assembler and Runtime Simulator CS-2710 Dr. Mark L. Hornick
The MARS Assembler …is a modern, “single pass” Assembler • Converts mnemonics to machine instructions (opcodes + operands) • Ex: add $t0, $s1, $s2 is assembled to 0x02324020 • Case on instructions is irrelevant; alternately: ADD $t0, $s1, $s2 • Case on registers matters: $T0 is not permitted • Reports syntactical errors • Ex: add $t0, $s1 (e.g. too few operands) • Can generate files containing machine code in a format that can be downloaded to real hardware CS-2710 Dr. Mark L. Hornick
MARS also implements a Debugger/Simulator • Simulates execution of the compiled program • Start, stop, single-step • Backwards step • Breakpoints • Can view contents of memory, registers • Tracks cycles required to execute • And lots more – see the help documentation CS-2710 Dr. Mark L. Hornick
Number representation in MIPS assembly language • All values are decimal unless notated otherwise • addi $t0, $s1, 100# decimal 100 (default) • addi $t0, $s1, 0144# octal 100 (note leading 0) • addi $t0, $s1, 0x64# hex 100 (note leading 0x) • Radix prefixes • 0 – octal • 0x, 0X – hexadecimal • 0x002a is equivalent to 0x2A CS-2710 Dr. Mark L. Hornick
Labels can be used in place of actual addresses • Every input line can be preceded by a label • an alphanumeric string terminated by a colon (:) • Labels are used as targets for jump and branch instructions • The assembler automatically figures out what address to assign to a label CS-2710 Dr. Mark L. Hornick
Every input line can be preceded by a label Example: Start:addi $t0, $s1, 100 # t0 = s1 + 100 Here: j Here# repeat forever • Labels are alphanumeric strings terminated by a colon(:) • Labels are given the value of the location in memory where the following instruction will be placed • Labels can be used as jump and branch targets in program instructions • The label Start:is assigned the value of the location of the addi instruction (0x00400000); Here: is assigned 0x0040001c, the location of the j instruction • The assembler automatically figures out what address to assign to a label CS-2710 Dr. Mark L. Hornick
Directives are used within an assembly language program to control certain aspects of the operation of the Assembler Directives begin with a period (.) • Directive often take operands, but not always • Ex: .text • Ex: .byte 1,2,3,4 • Case does not matter • .TEXT is equivalent Directives are not instructions – they are not translated to machine instructions • They only “direct” the Assembler how to interpret subsequent assembly language instructions • All directives are documented in the online help of MARS Directives may appear anywhere in an assembly program CS-2710 Dr. Mark L. Hornick
Some assembler directives are used to define where to place things in memory: .text [loc] • Alerts the Assembler that subsequent assembly statements are intended to generate instructions for the Text Segment of main memory • ie, where executable machine code is placed • Location set by MARS memory configuration settings • If absent, a default value will be used by the Assembler .data [loc] • Directs the Assembler where to begin placing subsequent data in memory • Example:.data.byte 1,2,3,4 directs the subsequent data bytes 1,2,3,4,5 to be placed in the data segment of main memory CS-2710 Dr. Mark L. Hornick