Difference between revisions of "CSC231 Homework 7 2015"
(Created page with "--~~~~ ---- <showafterdate after="20151111 12:00" before="20151231 00:00"> <bluebox> </bluebox> =Problem 1= <br /> <br /> Your assignment is to add a new function to '''231Li...") |
|||
Line 35: | Line 35: | ||
<br /> | <br /> | ||
::<source lang="asm"> | ::<source lang="asm"> | ||
− | ;;; | + | ;;; 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 | ;;; they are contained in 231Lib2.asm | ||
Line 55: | Line 64: | ||
mov edx, 0x7FFFFFFF | mov edx, 0x7FFFFFFF | ||
mov esi, 2 | mov esi, 2 | ||
− | mov edi, | + | mov edi, 0x80000002 |
call _printRegs | call _printRegs | ||
− | mov eax, | + | mov eax, 0x01234567 |
− | mov ebx, | + | mov ebx, 0x000000FF |
− | mov ecx, | + | mov ecx, 0x00000001 |
− | mov edx, | + | mov edx, 0x0 |
− | mov esi, | + | mov esi, 10 |
− | mov edi, | + | mov edi, 0xFFFFFFFE |
− | + | ||
call _printRegs | call _printRegs | ||
</source> | </source> | ||
+ | <br /> | ||
+ | The output of the program above should be: | ||
+ | <br /> | ||
+ | |||
+ | 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> | </showafterdate> |
Revision as of 15:28, 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 mov eax, 0x01234567 mov ebx, 0x000000FF mov ecx, 0x00000001 mov edx, 0x0 mov esi, 10 mov edi, 0xFFFFFFFE call _printRegs
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>