Open main menu

CDOT Wiki β

Changes

SPO600 64-bit Assembly Language Lab

408 bytes added, 21:56, 5 October 2022
no edit summary
=== Resources ===
* [[Assembler Basics]](includes instructions on how to use the GNU Assembler)
* [[Syscalls]]
* [[x86_64 Register and Instruction Quick Start]]
=== Optional Investigation ===
1. Build and run the three C versions of the program for x86_64 and aarch64, using <code>make</code>. Take a look at the differences in the code.
2. Use the <code>objdump -d</code> command to dump (print) the object code (machine code) and disassemble it into assembler for each of the binaries. Find the <code><nowiki><main></nowiki></code> section and take a look at the code. Also notice the total amount of code.
3. Review, build, and run the x86_64 assembly language programsusing <code>make</code>, taking note of the commands that are executed to assemble and link the code. Take a look at the code using <code>objdump -d '''objectfile'''</code> and compare it to the source code. Notice the absence of other code (compared to the C binary, which had a lot of extra code).
4. Build and run the assembly language version of the program for aarch64using <code>make</code>, taking note of the commands that are executed to assemble and link the code. Verify that you can disassemble the object code in the ELF binary using <code>objdump -d ''objectfile''</code> and take a look at the code.
=== Lab Tasks ===
{{Admon/tip|Character conversion|In order to print the loop index value, you will need to convert from an integer to digit character. In ASCII/ISO-8859-1/Unicode UTF-8, the digit characters are in the range 48-57 (0x30-0x39). You will also need to assemble the message to be printed for each line - you can do this by writing the digit into the message buffer before outputting it to stdout, which is probably the best approach, or you can perform a sequence of writes for the thee parts of the message ('Loop: ', number, '\n'). You may want to refer to the manpage for <code>ascii</code>.}}
 
{{Admon/tip|6502 Implementation|For reference, here is a [[6502 Counting Loop Example|6502 implementation of this loop]].}}
3. Repeat the previous step for x86_64.