Difference between revisions of "CSC231 Homwork 2 Solution 2010"

From dftwiki3
Jump to: navigation, search
(Mystery Program)
 
(8 intermediate revisions by the same user not shown)
Line 3: Line 3:
  
 
__TOC__
 
__TOC__
 +
 +
<onlysmith>
 +
=Number Systems=
 +
<code><pre>
 +
Angela Zhu
 +
231a-ab
 +
hw2b.txt
 +
CSC 231
 +
Sept. 29, 2010
 +
 +
Decimal: 135
 +
Hexadecimal: 87
 +
Binary: 1000 0111
 +
 +
Decimal: 1001
 +
Hexadecimal: 3E9
 +
Binary: 0011 1110 1001
 +
 +
Decimal: 255
 +
Hexadecimal: FF
 +
Binary: 1111 1111
 +
 +
Decimal: 2561
 +
Hexadecimal: A01
 +
Binary: 1010 0000 0001
 +
 +
Decimal: 65535
 +
Hexadecimal: FFFF
 +
Binary: 1111 1111 1111 1111
 +
 +
Decimal: 63640
 +
Hexadecimal: F898
 +
Binary: 1111 1000 1001 1000
 +
 +
Decimal: 31
 +
Hexadecimal: 1F
 +
Binary: 1 1111
 +
 +
Decimal: 2290649224
 +
Hexadecimal: 88888888
 +
Binary: 1000 1000 1000 1000 1000 1000 1000 1000
 +
 +
</pre></code>
 +
 +
=Logic Design=
 +
 +
* To test the validity of boolean function, a simple Python program can be of great help.
 +
 +
<code><pre>
 +
#! /bin/env python
 +
# truthtable.py
 +
# D. Thiebaut
 +
# how a simple python program can generate the
 +
# truth table of a boolean function
 +
#
 +
 +
def xor( a, b ):
 +
    return a and (not b) or (not a ) and b
 +
 +
def candidate( b3, b2, b1, b0 ):
 +
    return b2 and b3 and not (b0 and b1) \
 +
        or b0 and b1 and not (b2 and b3) \
 +
        or xor( b0, b1) and xor( b2, b3 )
 +
 +
def main():
 +
    print "  a  b  c  d |  f  "
 +
    print "------------+------"
 +
    for a in [ 0, 1 ]:
 +
        for b in [ 0, 1 ]:
 +
            for c in [ 0, 1 ]:
 +
                for d in [ 0, 1 ]:
 +
                    x = candidate( a, b, c, d )
 +
                    print "%3d%3d%3d%3d  |%3d" % \
 +
                        ( a, b, c, d, x )
 +
 +
main()
 +
 +
</pre></code>
 +
 +
* [[media:CSC231_hw2_solution_Part_1_2010.pdf | Solution (pdf)]]
  
 
=Mystery Program=
 
=Mystery Program=
 +
 +
* The program prints a quote attributed to Kurt Cobain: "Practice makes perfect... but nobody's perfect... so why practice?"
  
 
<code><pre>
 
<code><pre>
+
     1                                  ;;; hw2c.asm
     1                                  ;;; program_name.asm
+
     2                                  ;;; Alec Goebel
     2                                  ;;; your name
 
 
     3                                  ;;;  
 
     3                                  ;;;  
     4                                  ;;; a description of the program
+
     4                                  ;;; reverse engineered from provided hex dump. 
     5                                  ;;;
+
     5                                  ;;; Prints "practice makes perfect...but nobody's perfect...so why practice?\n\n"
     6                                  ;;; to assemble and run:
+
     6                                 ;;;
     7                                 ;;;
+
    7                                 ;;; to assemble:
     8                                 ;;;    nasm -f elf -F  stabs program.asm
+
     8                                 ;;;
    9                                 ;;;    ld -melf_i386 -o program program.o
+
     9                                 ;;;    nasm -f elf -F  stabs hw2c.asm
     10                                 ;;;    ./program
+
    10                                 ;;;    ld -o program hw2c.o
     11                                 ;;; -------------------------------------------------------------------
+
     11                                  ;;;
    12                                 
+
    12                                  ;;; to run
    13                                  ;%include files here...
+
    13                                 ;;;    $ ./hw2c
    14                                 
+
    14                                  ;;;    practice makes perfect...but nobody's perfect...so why practice?
    15                                  EXIT    equ            1
+
    15                                  ;;;   
    16                                  WRITE  equ            4
+
    16                                  ;;;    $
    17                                  STDOUT  equ            1
+
     17                                 ;;; -------------------------------------------------------------------
 
     18                                   
 
     18                                   
     19                                       ;; ------------------------------------------------------------
+
     19                                 EXIT    equ            1
     20                                 ;; data areas
+
     20                                 WRITE  equ            4
     21                                 ;; ------------------------------------------------------------
+
     21                                 STDOUT  equ            1
 
     22                                   
 
     22                                   
     23                                 section .data
+
     23                                       ;; ------------------------------------------------------------
     24 00000000 206D616B657320          m2 db " makes "
+
     24                                 ;; data areas
     25                                 M2LEN equ $-m2
+
     25                                 ;; ------------------------------------------------------------
     26 00000007 706572666563742E2E-    m3 db "perfect..."
+
     26                                  
     27 00000010 2E               
+
     27                                 section .data
     28                                  M3LEN equ $-m3
+
     28                                   
     29 00000011 7072616374696365        m1 db "practice"
+
     29 00000000 206D616B657320          makes db " makes "
     30                                 M1LEN equ $-m1
+
     30 00000007 706572666563742E2E-     prct db "perfect...practice"
     31 00000019 627574206E6F626F64-     m4 db "but nobody's "
+
     31 00000010 2E7072616374696365
     32 00000022 79277320         
+
    32 00000019 627574206E6F626F64-     nbdy db "but nobody's so why "
    33                                  M4LEN equ $-m4
+
     33 00000022 79277320736F207768-
     34 00000026 736F2077687920          m5 db "so why "
+
     34 0000002B 7920             
     35                                 M5LEN equ $-m5
+
     35 0000002D 3F0A0A                 qst db "?", 10, 10
    36 0000002D 3F0A0A                 m6 db "?",0x0a,0x0a
+
    36                                 
     37                                 M6LEN equ $-m6
+
     37                                  
     38                                 
+
     38                                  ;; ------------------------------------------------------------
     39                                  
+
     39                                 ;; code area
 
     40                                  ;; ------------------------------------------------------------
 
     40                                  ;; ------------------------------------------------------------
     41                                 ;; code area
+
     41                                  
     42                                  ;; ------------------------------------------------------------
+
     42                                  section .text
     43                                  
+
     43                                 global _start
     44                                 section .text
+
     44                                  
     45                                 global _start
+
     45                                 _start:
     46                                  
+
     46                                
     47                                 _start:
+
     47                                 ;; write 'practice' on STDOUT
     48 00000000 B804000000              mov eax, WRITE
+
     48 00000000 B804000000              mov eax,WRITE
     49 00000005 BB01000000              mov ebx, STDOUT
+
     49 00000005 BB01000000              mov ebx,STDOUT
     50 0000000A B9[11000000]            mov ecx, m1 ; practice
+
     50 0000000A B9[11000000]            mov ecx,prct+10
     51 0000000F BA08000000              mov edx, M1LEN
+
     51 0000000F BA08000000              mov edx,8
     52 00000014 CD80                    int 0x80
+
     52 00000014 CD80                    int 0x80
     53                                
+
     53                                  
     54 00000016 B8FFFFFFFF              mov eax, -1
+
     54                                 ;; pointless instruction
     55 0000001B B804000000              mov eax, WRITE
+
    55 00000016 B8FFFFFFFF              mov eax,0xffffffff
     56 00000020 BB01000000              mov ebx, STDOUT
+
    56                                 
     57 00000025 B9[07000000]            mov ecx, m3
+
    57                                  ;; write ' makes ' on STDOUT
     58 0000002A B9[00000000]            mov ecx, m2
+
     58 0000001B B804000000              mov eax,WRITE
     59 0000002F BA07000000              mov edx, M2LEN
+
     59 00000020 BB01000000              mov ebx,STDOUT
     60 00000034 CD80                    int 0x80
+
     60 00000025 B9[07000000]            mov ecx,prct  ;; pointless
     61                                 
+
     61 0000002A B9[00000000]            mov ecx,makes
     62 00000036 BA[11000000]            mov edx, m1
+
     62 0000002F BA07000000              mov edx,7
     63 0000003B B801000000              mov eax, STDOUT
+
     63 00000034 CD80                    int 0x80
     64 00000040 B804000000              mov eax, WRITE
+
     64                                 
     65 00000045 BB01000000              mov ebx, STDOUT
+
    65                                  ;; write 'perfect...' on STDOUT
     66 0000004A B9[07000000]            mov ecx, m3
+
     66 00000036 BA[11000000]            mov edx,prct+10  ;; pointless
     67 0000004F BA0A000000              mov edx, M3LEN
+
     67 0000003B B801000000              mov eax,1     ;; pointless
     68 00000054 CD80                    int 0x80
+
     68 00000040 B804000000              mov eax,WRITE
     69                                
+
     69 00000045 BB01000000              mov ebx,STDOUT
     70 00000056 B804000000              mov eax, WRITE
+
     70 0000004A B9[07000000]            mov ecx,prct
     71 0000005B BB01000000              mov ebx, STDOUT
+
     71 0000004F BA0A000000              mov edx,10
     72 00000060 B9[19000000]            mov ecx, m4
+
     72 00000054 CD80                    int 0x80
     73 00000065 BA0D000000              mov edx, M4LEN
+
     73                                 
     74 0000006A CD80                    int 0x80
+
    74                                 ;; write "but nobody's " on STDOUT
     75                                
+
     75 00000056 B804000000              mov eax,WRITE
     76 0000006C B804000000              mov eax, WRITE
+
     76 0000005B BB01000000              mov ebx,STDOUT
     77 00000071 BB01000000              mov ebx, STDOUT
+
     77 00000060 B9[19000000]            mov ecx,nbdy
     78 00000076 B9[06000000]            mov ecx, m3-1
+
     78 00000065 BA0D000000              mov edx,13
     79 0000007B BA0A000000              mov edx, M3LEN
+
     79 0000006A CD80                    int 0x80
     80 00000080 41                      inc ecx
+
     80                                 
     81 00000081 CD80                    int 0x80
+
    81                                 ;; write "perfect..." to STDOUT
     82                                
+
     82 0000006C B804000000              mov eax,WRITE
     83 00000083 B804000000              mov eax, WRITE
+
     83 00000071 BB01000000              mov ebx,STDOUT
     84 00000088 BB01000000              mov ebx, STDOUT
+
     84 00000076 B9[06000000]            mov ecx,prct-1
     85 0000008D B9[24000000]            mov ecx, m5-2
+
     85 0000007B BA0A000000              mov edx,10
     86 00000092 41                      inc ecx
+
     86 00000080 41                      inc ecx
     87 00000093 BA07000000              mov edx, M5LEN
+
     87 00000081 CD80                    int 0x80
     88 00000098 41                      inc ecx
+
     88                                 
     89 00000099 CD80                    int 0x80
+
    89                                 ;; write "so why " to STDOUT
     90                                
+
     90 00000083 B804000000              mov eax,WRITE
     91 0000009B B804000000              mov eax, WRITE
+
     91 00000088 BB01000000              mov ebx,STDOUT
    92 000000A0 BB01000000              mov ebx, STDOUT
+
     92 0000008D B9[24000000]            mov ecx,nbdy+11
    93 000000A5 B9[11000000]            mov ecx, m1
+
     93 00000092 41                      inc ecx
    94 000000AA BA08000000              mov edx, M1LEN
+
     94 00000093 BA07000000              mov edx,7
    95 000000AF CD80                    int 0x80
+
     95 00000098 41                      inc ecx
    96                                
+
     96 00000099 CD80                    int 0x80
    97 000000B1 B804000000              mov eax, WRITE
+
     97                                
    98 000000B6 BB01000000              mov ebx, STDOUT
+
     98                                  ;; write "practice" to STDOUT
    99 000000BB B9[2D000000]            mov ecx, m6
+
    99 0000009B B804000000              mov eax,WRITE
   100 000000C0 BA03000000              mov edx, M6LEN
+
  100 000000A0 BB01000000              mov ebx,STDOUT
   101 000000C5 CD80                    int 0x80
+
  101 000000A5 B9[11000000]            mov ecx,prct+10
   102                                
+
  102 000000AA BA08000000              mov edx,8
   103                                 
+
  103 000000AF CD80                    int 0x80
  104                                 
+
  104                                 
  105                                          ;; (add your code here!!!!)
+
  105                                 ;; write "?\n\n"
  106                                 
+
  106 000000B1 B804000000              mov eax,WRITE
  107                                 
+
  107 000000B6 BB01000000              mov ebx,STDOUT
  108                                 
+
  108 000000BB B9[2D000000]            mov ecx,qst
  109                                 
+
   109 000000C0 BA03000000              mov edx,3
  110                                 ;; exit()
+
   110 000000C5 CD80                    int 0x80
   111                                 
+
   111                                
  112 000000C7 B801000000              mov eax,EXIT
+
   112                                 ;; exit()
   113 000000CC BB00000000              mov ebx,0
+
   113 000000C7 B801000000              mov eax,EXIT
   114 000000D1 CD80                    int 0x80 ; final system call
+
   114 000000CC BB00000000              mov ebx,0
  115     
+
   115 000000D1 CD80                    int 0x80 ; final system call
 +
 
 
</pre></code>
 
</pre></code>
  
 +
==Testing the Mystery Program==
 
<br />
 
<br />
 +
* To test the programs, the hexadecimal dump of the object file of the original program was compared to the hexadecimal dump of the object file of your version.
 +
* Assume that hw2_mystery.solution.asm is the orginal that you have to recreate, and assume that hw2c.asm is your program:
 +
 +
nasm -f elf hw2c.asm
 +
hexdump -C hw2c.o | tail -190 | head -40 > hw2c.lst
 +
 +
nasm -f elf hw2_mystery.solution.asm
 +
hexdump -C hw2_mystery.solution.o | tail -190 | head -40 > hw2_mystery.solution.lst
 +
 +
diff -y hw2_mystery.solution.lst  hw2c.lst
 +
 +
* The output is shown below.  When only 1 vertical bar separates the two columns, then the program on the left matches the program on the right.  When double vertical bars appear, there is a difference between the two programs.  Visual inspection will indicate where the problem bytes are...
 +
 +
000001f0  04 00 00 00 08 00 00 00  00 00 00 00 00 00 00 00  | 000001f0  04 00 00 00 08 00 00 00  00 00 00 00 00 00 00 00  |
 +
00000200  20 6d 61 6b 65 73 20 70  65 72 66 65 63 74 2e 2e  | 00000200  20 6d 61 6b 65 73 20 70  65 72 66 65 63 74 2e 2e  |
 +
00000210  2e 70 72 61 63 74 69 63  65 62 75 74 20 6e 6f 62  | 00000210  2e 70 72 61 63 74 69 63  65 62 75 74 20 6e 6f 62  |
 +
00000220  6f 64 79 27 73 20 73 6f  20 77 68 79 20 3f 0a 0a  | 00000220  6f 64 79 27 73 20 73 6f  20 77 68 79 20 3f 0a 0a  |
 +
00000230  b8 04 00 00 00 bb 01 00  00 00 b9 11 00 00 00 ba  | 00000230  b8 04 00 00 00 bb 01 00  00 00 b9 11 00 00 00 ba  |
 +
00000240  08 00 00 00 cd 80 b8 ff  ff ff ff b8 04 00 00 00  | | 00000240  08 00 00 00 cd 80 b8 04  00 00 00 bb 01 00 00 00  |
 +
00000250  bb 01 00 00 00 b9 07 00  00 00 b9 00 00 00 00 ba  | | 00000250  b9 07 00 00 00 b9 00 00  00 00 ba 10 00 00 00 cd  |
 +
00000260  07 00 00 00 cd 80 ba 11  00 00 00 b8 01 00 00 00  | | 00000260  80 ba 11 00 00 00 b8 01  00 00 00 b8 04 00 00 00  |
 +
00000270  b8 04 00 00 00 bb 01 00  00 00 b9 07 00 00 00 ba  | | 00000270  bb 01 00 00 00 b9 07 00  00 00 ba 0a 00 00 00 cd  |
 +
00000280  0a 00 00 00 cd 80 b8 04  00 00 00 bb 01 00 00 00  | | 00000280  80 b8 04 00 00 00 bb 01  00 00 00 b9 19 00 00 00  |
 +
00000290  b9 19 00 00 00 ba 0d 00  00 00 cd 80 b8 04 00 00  | | 00000290  ba 0d 00 00 00 cd 80 b8  04 00 00 00 bb 01 00 00  |
 +
000002a0  00 bb 01 00 00 00 b9 06  00 00 00 ba 0a 00 00 00  | | 000002a0  00 b9 06 00 00 00 ba 0a  00 00 00 41 cd 80 b8 04  |
 +
000002b0  41 cd 80 b8 04 00 00 00  bb 01 00 00 00 b9 24 00  | | 000002b0  00 00 00 bb 01 00 00 00  b9 24 00 00 00 41 ba 07  |
 +
000002c0  00 00 41 ba 07 00 00 00  41 cd 80 b8 04 00 00 00  | | 000002c0  00 00 00 41 cd 80 b8 04  00 00 00 bb 01 00 00 00  |
 +
000002d0  bb 01 00 00 00 b9 11 00  00 00 ba 08 00 00 00 cd  | | 000002d0  b9 0e 00 00 00 ba 0b 00  00 00 cd 80 b8 04 00 00  |
 +
000002e0  80 b8 04 00 00 00 bb 01  00 00 00 b9 2d 00 00 00  | | 000002e0  00 bb 01 00 00 00 b9 2d  00 00 00 ba 03 00 00 00  |
 +
000002f0  ba 03 00 00 00 cd 80 b8  01 00 00 00 bb 00 00 00  | | 000002f0  cd 80 b8 01 00 00 00 bb  00 00 00 00 cd 80 00 00  |
 +
00000300  00 cd 80 00 00 00 00 00  00 00 00 00 00 00 00 00  | | 00000300  00 54 68 65 20 4e 65 74  77 69 64 65 20 41 73 73  |
 +
 
<br />
 
<br />
 
<br />
 
<br />
 +
</onlysmith>
 
<br />
 
<br />
 
<br />
 
<br />

Latest revision as of 12:21, 14 December 2010

--D. Thiebaut 21:35, 6 October 2010 (UTC)




This section is only visible to computers located at Smith College