1,885
edits
Changes
no edit summary
=== Lab Tasks ===
1. Build and run the C version versions ofthe program for x86_64. Use objdump to disassemble and review the [[Machine Language|machine code]] in the binaries - make sure you understand it. Save the binaries for later review. 2. Review, build, and run the x86_64 assembler code. Use objdump to disassemble and review the [[Machine Language|machine code]] in the binaries - make sure you understand it. 4. Build and run the C versions of the program for aarch64 (note: you may need to <code>make clean</code>). 5. Review, build, and run the aarch64 assembler code. Use objdump to disassemble and review the machine code in the binaries, and make sure you understand it. 6. Here is a basic loop in x86_64 assembler: .text .globl _start start = 0 /* starting value for the loop index */ max = 10 /* loop exits when the index hits this number (loop condition is i<max */ _start: mov $0,%r15 /* loop index */ loop: /* ... do something useful here ... */ inc %r15 /* increment register 15 */ cmpq $10,%r15 /* see if we're done */ jne loop /* loop if we're not */ movq $0,%rdi /* exit status */ movq $60,%rax /* syscall sys_exit */ syscall Extend this loop so that it prints each digit from 0 to 9 like this: Loop: 0 Loop: 1 Loop: 2 Loop: 3 Loop: 4 Loop: 5 Loop: 6 Loop: 7 Loop: 8 Loop: 9 {{Admon/tip|Character conversion|In order to print these values, you will need to convert from an integer to digit character. In ASCII/ISO-9959-1/Unicode UTF-8, the digit characters are in the range 48-57 (0x30-0x39). You will also need to assemble the message that is output on each line - you can do this by writing the digit into the message buffer before writing it, or you can perform a sequence of writes for the various portions of the message.}}