Difference between revisions of "CSC231 Homework 7 2015"

From dftwiki3
Jump to: navigation, search
Line 99: Line 99:
 
   
 
   
 
</showafterdate>
 
</showafterdate>
 +
 +
<onlydft>
 +
text = """
 +
mov  eax, 0xFFFFFFFF
 +
                mov  ebx, 0
 +
                mov  ecx, 0x80000000
 +
                mov  edx, 0x7FFFFFFF
 +
                mov  esi,  2
 +
                mov  edi, 0x80000002
 +
 +
call
 +
                mov  eax, 0x01234567
 +
                mov  ebx, 0x000000FF
 +
                mov  ecx, 0x00000001
 +
                mov  edx, 0x0
 +
                mov  esi,  10
 +
                mov  edi, 0xFFFFFFFE
 +
 +
call
 +
                """
 +
 +
def printRegs( list1, list2 ):
 +
    print( list1 )
 +
    print( list2 )
 +
    for i in range( len( list1 ) ):
 +
        x = list2[i]
 +
        if x >= 0x8000000:
 +
            x = x - 2**32
 +
        print( list1[i], format( list2[i], '08X' ), list2[i], x )
 +
             
 +
list1 = ["eax", "ebx", "ecx", "edx", "edi", "esi" ]
 +
list2 = [ 0, 0, 0, 0, 0, 0 ]
 +
 +
for line in text.split("\n" ):
 +
    line = line.strip()
 +
    if line.find( "call" )!= -1:
 +
        printRegs( list1, list2 )
 +
        continue
 +
    for i in range( len( list1 ) ):
 +
        if line.find( list1[i] ) != -1:
 +
            list2[i] = eval( line.split( "," )[-1].strip() )
 +
 +
           
 +
           
 +
       
 +
 +
</onlydft>
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
[[Category:CSC231]][[Category:Nasm]][[Category:Homework]]

Revision as of 15:31, 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>


...