CSC231 Homework 7 2015

From dftwiki3
Revision as of 16:28, 10 November 2015 by Thiebaut (talk | contribs)
Jump to: navigation, search

--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>