Difference between revisions of "CSC231 Homework 7 2015"

From dftwiki3
Jump to: navigation, search
(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">
;;;  extern functions that will be linked to this 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
 
;;;  they are contained in 231Lib2.asm
  
Line 55: Line 64:
 
                 mov  edx, 0x7FFFFFFF
 
                 mov  edx, 0x7FFFFFFF
 
                 mov  esi,  2
 
                 mov  esi,  2
                 mov  edi, -2
+
                 mov  edi, 0x80000002
 
   
 
   
 
                 call    _printRegs
 
                 call    _printRegs
  
                 mov  eax, 0xFFFFFFFF
+
                 mov  eax, 0x01234567
                 mov  ebx, 0
+
                 mov  ebx, 0x000000FF
                 mov  ecx, 0x80000000
+
                 mov  ecx, 0x00000001
                 mov  edx, 0x7FFFFFFF
+
                 mov  edx, 0x0
                 mov  esi,  2
+
                 mov  esi,  10
                 mov  edi, -2
+
                 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>