Difference between revisions of "CSC231 Homework 7 2015"
Line 67: | Line 67: | ||
call _printRegs | call _printRegs | ||
+ | call _println | ||
mov eax, 0x01234567 | mov eax, 0x01234567 | ||
Line 76: | Line 77: | ||
call _printRegs | call _printRegs | ||
+ | call _println | ||
</source> | </source> |
Revision as of 15:30, 10 November 2015
--D. Thiebaut (talk) 11:58, 10 November 2015 (EST)
<showafterdate after="20151111 12:00" before="20151231 00:00">
Problem 1
Your assignment is to add a new function to 231Lib2.asm called _printRegs.
- Take your 231Lib.asm library and make a copy of it called 231Lib2.asm.
cp 231Lib.asm 231Lib2.asm
- Add a globalstatement 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 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 01234567 19088743 19088743 ebx 000000FF 255 255 ecx 00000001 1 1 edx 00000000 0 0 edi FFFFFFFE 4294967294 -2 esi 0000000A 10 10
</showafterdate>