Difference between revisions of "CSC231 Homework 7 2015"

From dftwiki3
Jump to: navigation, search
Line 81: Line 81:
 
The output of the program above should be:
 
The output of the program above should be:
 
<br />
 
<br />
+
 
  eax ffffffff 4294967295 -1
+
  eax FFFFFFFF 4294967295 -1
 
  ebx 00000000 0 0
 
  ebx 00000000 0 0
 
  ecx 80000000 2147483648 -2147483648
 
  ecx 80000000 2147483648 -2147483648
  edx 7fffffff 2147483647 -2147483649
+
  edx 7FFFFFFF 2147483647 -2147483649
 
  edi 80000002 2147483650 -2147483646
 
  edi 80000002 2147483650 -2147483646
 
  esi 00000002 2 2
 
  esi 00000002 2 2
 
+
 
  eax 01234567 19088743 19088743
 
  eax 01234567 19088743 19088743
  ebx 000000ff 255 255
+
  ebx 000000FF 255 255
 
  ecx 00000001 1 1
 
  ecx 00000001 1 1
 
  edx 00000000 0 0
 
  edx 00000000 0 0
  edi fffffffe 4294967294 -2
+
  edi FFFFFFFE 4294967294 -2
  esi 0000000a 10 10
+
  esi 0000000A 10 10
 
   
 
   
 
</showafterdate>
 
</showafterdate>

Revision as of 16:29, 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>