Difference between revisions of "CSC231 Homework 7 2015"
Line 16: | Line 16: | ||
cp 231Lib.asm 231Lib2.asm | cp 231Lib.asm 231Lib2.asm | ||
− | * Add a '''global'''statement at the top of the program (with the other similar statements): | + | * Add a '''global''' statement at the top of the program (with the other similar statements): |
<br /> | <br /> | ||
::<source lang="asm"> | ::<source lang="asm"> |
Revision as of 15:44, 10 November 2015
--D. Thiebaut (talk) 11:58, 10 November 2015 (EST)
<showafterdate after="20151111 12:00" before="20151231 00:00">
This assignment is due on Wednesday, 11/18/15, at 11:55 p.m. Document your program well!
Contents
Problem
Your assignment is to add a new function to 231Lib.asm called _printRegs.
- Take your 231Lib.asm library and make a copy of it, and call it 231Lib2.asm.
cp 231Lib.asm 231Lib2.asm
- Add a global statement at the top of the program (with the other similar statements):
global _printRegs
- Go to the end of the file and add a new function called _printRegs
- Your new function should display the contents of eax, ebx, ecx, edx, edi, and esi, in this order:
- in hexadecimal (you should have a function for that)
- as an unsigned number (_printDec will do that for you)
- as a 2's complement signed number (you have to figure this part out).
- Submit you 231Lib2.asm program to Moodle when done
Testing
- To test your new function, create a new program that will be linked with your modified library, and will display all the registers.
- Example test program:
;;; test.asm ;;; assemble and run as follows: ;;; ;;; nasm -f elf test.asm ;;; nasm -f elf 231Lib2.asm ;;; ld -melf_i386 test.o 231Lib2.o -o myTest ;;; ./myTest ;;; ;;; Extern functions that will be linked to this program ;;; they are contained in 231Lib2.asm extern _printDec extern _printString extern _println extern _getInput extern _printRegs ;;; ------------------------------------------------------ ;;; CODE SECTION ;;; ------------------------------------------------------ section .text global _start _start: mov eax, 0xFFFFFFFF mov ebx, 0 mov ecx, 0x80000000 mov edx, 0x7FFFFFFF mov esi, 2 mov edi, 0x80000002 call _printRegs call _println call _printRegs call _println mov eax, 0x01234567 mov ebx, 0x000000FF mov ecx, 0x00000001 mov edx, 0x0 mov esi, 10 mov edi, 0xFFFFFFFE call _printRegs call _println
The output of the program above should be:
eax FFFFFFFF 4294967295 -1 ebx 00000000 0 0 ecx 80000000 2147483648 -2147483648 edx 7FFFFFFF 2147483647 -2147483649 edi 80000002 2147483650 -2147483646 esi 00000002 2 2 eax FFFFFFFF 4294967295 -1 ebx 00000000 0 0 ecx 80000000 2147483648 -2147483648 edx 7FFFFFFF 2147483647 -2147483649 edi 80000002 2147483650 -2147483646 esi 00000002 2 2 eax 01234567 19088743 19088743 ebx 000000FF 255 255 ecx 00000001 1 1 edx 00000000 0 0 edi FFFFFFFE 4294967294 -2 esi 0000000A 10 10
Hints
- You may want to create a table of the 16 4-bit binary numbers I draw in class regularly, and available here. Assume that the most significant bit of the group of 4 bits is a sign bit, and enter the values of the numbers in a 4th column. Figure out the algorithm you have to use to actually print the numbers in the 4th column. For example, how do you print 0010 as 2, but 1111 as -1?
Submission
- Submit your 231Lib2.asm file on Moodle. It will be tested with a different main program, that will set the registers to different values and verify that your _printRegs function prints them correctly.
</showafterdate>