CSC231 Homework 2 2012

From dftwiki3
Revision as of 17:17, 12 September 2012 by Thiebaut (talk | contribs) (Problem #1)
Jump to: navigation, search

--D. Thiebaut 15:44, 12 September 2012 (EDT)


This assignment can be done in pair. If you elect to work with somebody else in the class, make sure the work is done only when the two people working on the homework are together. The homework is due Wednesday 9/19/12 evening at 11:59 p.m. + 1 minute.




Problem #1

Recreate the original hw2a.asm program whose hexdump is shown below. Make sure your program is written such that once it's assembled and linked, the hexdump command will output the same information for your program as it does for mine, as shown below.


hexdump -C hw2a
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  80 80 04 08 34 00 00 00  |............4...|
00000020  60 03 00 00 00 00 00 00  34 00 20 00 02 00 28 00  |`.......4. ...(.|
00000030  08 00 05 00 01 00 00 00  00 00 00 00 00 80 04 08  |................|
00000040  00 80 04 08 10 01 00 00  10 01 00 00 05 00 00 00  |................|
00000050  00 10 00 00 01 00 00 00  10 01 00 00 10 91 04 08  |................|
00000060  10 91 04 08 5f 00 00 00  5f 00 00 00 06 00 00 00  |...._..._.......|
00000070  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080  b8 04 00 00 00 bb 01 00  00 00 b9 10 91 04 08 ba  |................|
00000090  02 00 00 00 cd 80 b8 04  00 00 00 bb 01 00 00 00  |................|
000000a0  b9 49 91 04 08 ba 05 00  00 00 cd 80 b8 04 00 00  |.I..............|
000000b0  00 bb 01 00 00 00 b9 18  91 04 08 ba 02 00 00 00  |................|
000000c0  cd 80 b8 04 00 00 00 bb  01 00 00 00 b9 1e 91 04  |................|
000000d0  08 ba 01 00 00 00 cd 80  b8 04 00 00 00 bb 01 00  |................|
000000e0  00 00 b9 16 91 04 08 ba  0c 00 00 00 cd 80 b8 04  |................|
000000f0  00 00 00 bb 01 00 00 00  b9 53 91 04 08 ba 1c 00  |.........S......|
00000100  00 00 cd 80 bb 00 00 00  00 b8 01 00 00 00 cd 80  |................|
00000110  49 20 68 61 74 65 20 63  68 6f 63 6f 6c 61 74 65  |I hate chocolate|
00000120  2c 20 61 6e 64 20 70 72  65 66 65 72 20 61 6e 63  |, and prefer anc|
00000130  68 6f 76 69 65 73 2c 20  61 6e 64 20 49 20 65 73  |hovies, and I es|
00000140  70 65 63 69 61 6c 6c 79  20 6c 69 6b 65 20 74 68  |pecially like th|
00000150  65 6d 20 77 69 74 68 20  77 68 69 70 70 65 64 20  |em with whipped |
00000160  63 72 65 61 6d 20 6f 6e  20 74 6f 70 21 0a 0a 00  |cream on top!...|
00000170  01 00 00 00 00 00 23 00  0a 00 00 00 01 00 00 00  |......#.........|
00000180  64 00 00 00 80 80 04 08  00 00 00 00 44 00 21 00  |d...........D.!.|
00000190  80 80 04 08 00 00 00 00  44 00 22 00 85 80 04 08  |........D.".....|
000001a0  00 00 00 00 44 00 23 00  8a 80 04 08 00 00 00 00  |....D.#.........|
000001b0  44 00 24 00 8f 80 04 08  00 00 00 00 44 00 25 00  |D.$.........D.%.|
000001c0  94 80 04 08 00 00 00 00  44 00 27 00 96 80 04 08  |........D.'.....|
000001d0  00 00 00 00 44 00 28 00  9b 80 04 08 00 00 00 00  |....D.(.........|
000001e0  44 00 29 00 a0 80 04 08  00 00 00 00 44 00 2a 00  |D.).........D.*.|
000001f0  a5 80 04 08 00 00 00 00  44 00 2b 00 aa 80 04 08  |........D.+.....|
00000200  00 00 00 00 44 00 2d 00  ac 80 04 08 00 00 00 00  |....D.-.........|
00000210  44 00 2e 00 b1 80 04 08  00 00 00 00 44 00 2f 00  |D...........D./.|
00000220  b6 80 04 08 00 00 00 00  44 00 30 00 bb 80 04 08  |........D.0.....|
00000230  00 00 00 00 44 00 31 00  c0 80 04 08 00 00 00 00  |....D.1.........|
00000240  44 00 33 00 c2 80 04 08  00 00 00 00 44 00 34 00  |D.3.........D.4.|
00000250  c7 80 04 08 00 00 00 00  44 00 35 00 cc 80 04 08  |........D.5.....|
00000260  00 00 00 00 44 00 36 00  d1 80 04 08 00 00 00 00  |....D.6.........|
00000270  44 00 37 00 d6 80 04 08  00 00 00 00 44 00 3b 00  |D.7.........D.;.|
00000280  d8 80 04 08 00 00 00 00  44 00 3c 00 dd 80 04 08  |........D.<.....|
00000290  00 00 00 00 44 00 3d 00  e2 80 04 08 00 00 00 00  |....D.=.........|
000002a0  44 00 3e 00 e7 80 04 08  00 00 00 00 44 00 3f 00  |D.>.........D.?.|
000002b0  ec 80 04 08 00 00 00 00  44 00 41 00 ee 80 04 08  |........D.A.....|
000002c0  00 00 00 00 44 00 42 00  f3 80 04 08 00 00 00 00  |....D.B.........|
000002d0  44 00 43 00 f8 80 04 08  00 00 00 00 44 00 44 00  |D.C.........D.D.|
000002e0  fd 80 04 08 00 00 00 00  44 00 45 00 02 81 04 08  |........D.E.....|
000002f0  00 00 00 00 44 00 4a 00  04 81 04 08 00 00 00 00  |....D.J.........|
00000300  44 00 4b 00 09 81 04 08  00 00 00 00 44 00 4c 00  |D.K.........D.L.|
00000310  0e 81 04 08 00 00 00 00  64 00 00 00 00 00 00 00  |........d.......|
00000320  00 68 77 32 61 2e 61 73  6d 00 00 2e 73 79 6d 74  |.hw2a.asm...symt|
00000330  61 62 00 2e 73 74 72 74  61 62 00 2e 73 68 73 74  |ab..strtab..shst|
00000340  72 74 61 62 00 2e 74 65  78 74 00 2e 64 61 74 61  |rtab..text..data|
00000350  00 2e 73 74 61 62 00 2e  73 74 61 62 73 74 72 00  |..stab..stabstr.|
00000360  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000380  00 00 00 00 00 00 00 00  1b 00 00 00 01 00 00 00  |................|
00000390  06 00 00 00 80 80 04 08  80 00 00 00 90 00 00 00  |................|
000003a0  00 00 00 00 00 00 00 00  10 00 00 00 00 00 00 00  |................|
000003b0  21 00 00 00 01 00 00 00  03 00 00 00 10 91 04 08  |!...............|
000003c0  10 01 00 00 5f 00 00 00  00 00 00 00 00 00 00 00  |...._...........|
000003d0  04 00 00 00 00 00 00 00  27 00 00 00 01 00 00 00  |........'.......|
000003e0  00 00 00 00 00 00 00 00  70 01 00 00 b0 01 00 00  |........p.......|
000003f0  04 00 00 00 00 00 00 00  04 00 00 00 0c 00 00 00  |................|
00000400  2d 00 00 00 03 00 00 00  00 00 00 00 00 00 00 00  |-...............|
00000410  20 03 00 00 0a 00 00 00  00 00 00 00 00 00 00 00  | ...............|
00000420  01 00 00 00 00 00 00 00  11 00 00 00 03 00 00 00  |................|
00000430  00 00 00 00 00 00 00 00  2a 03 00 00 36 00 00 00  |........*...6...|
00000440  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00  |................|
00000450  01 00 00 00 02 00 00 00  00 00 00 00 00 00 00 00  |................|
00000460  a0 04 00 00 50 01 00 00  07 00 00 00 11 00 00 00  |....P...........|
00000470  04 00 00 00 10 00 00 00  09 00 00 00 03 00 00 00  |................|
00000480  00 00 00 00 00 00 00 00  f0 05 00 00 7f 00 00 00  |................|
00000490  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00  |................|
000004a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000004b0  00 00 00 00 80 80 04 08  00 00 00 00 03 00 01 00  |................|
000004c0  00 00 00 00 10 91 04 08  00 00 00 00 03 00 02 00  |................|
000004d0  00 00 00 00 00 00 00 00  00 00 00 00 03 00 03 00  |................|
000004e0  00 00 00 00 00 00 00 00  00 00 00 00 03 00 04 00  |................|
000004f0  01 00 00 00 00 00 00 00  00 00 00 00 04 00 f1 ff  |................|
00000500  0a 00 00 00 10 91 04 08  01 00 00 00 01 00 02 00  |................|
00000510  0c 00 00 00 02 00 00 00  00 00 00 00 00 00 f1 ff  |................|
00000520  11 00 00 00 12 91 04 08  01 00 00 00 01 00 02 00  |................|
00000530  16 00 00 00 17 91 04 08  01 00 00 00 01 00 02 00  |................|
00000540  20 00 00 00 0b 00 00 00  01 00 00 00 01 00 f1 ff  | ...............|
00000550  29 00 00 00 2d 91 04 08  01 00 00 00 01 00 02 00  |)...-...........|
00000560  33 00 00 00 0a 00 00 00  01 00 00 00 01 00 f1 ff  |3...............|
00000570  40 00 00 00 49 91 04 08  01 00 00 00 01 00 02 00  |@...I...........|
00000580  45 00 00 00 05 00 00 00  01 00 00 00 01 00 f1 ff  |E...............|
00000590  4d 00 00 00 53 91 04 08  01 00 00 00 01 00 02 00  |M...S...........|
000005a0  55 00 00 00 1c 00 00 00  00 00 00 00 00 00 f1 ff  |U...............|
000005b0  60 00 00 00 80 80 04 08  00 00 00 00 10 00 01 00  |`...............|
000005c0  67 00 00 00 6f 91 04 08  00 00 00 00 10 00 f1 ff  |g...o...........|
000005d0  73 00 00 00 6f 91 04 08  00 00 00 00 10 00 f1 ff  |s...o...........|
000005e0  7a 00 00 00 70 91 04 08  00 00 00 00 10 00 f1 ff  |z...p...........|
000005f0  00 68 77 32 61 2e 61 73  6d 00 49 00 49 6c 65 6e  |.hw2a.asm.I.Ilen|
00000600  00 68 61 74 65 00 63 68  6f 63 6f 6c 61 74 65 00  |.hate.chocolate.|
00000610  63 68 6f 63 6f 4c 65 6e  00 61 6e 63 68 6f 76 69  |chocoLen.anchovi|
00000620  65 73 00 61 6e 63 68 6f  76 69 65 73 4c 65 6e 00  |es.anchoviesLen.|
00000630  6c 69 6b 65 00 6c 69 6b  65 4c 65 6e 00 77 68 69  |like.likeLen.whi|
00000640  70 70 65 64 00 77 68 69  70 70 65 64 4c 65 6e 00  |pped.whippedLen.|
00000650  5f 73 74 61 72 74 00 5f  5f 62 73 73 5f 73 74 61  |_start.__bss_sta|
00000660  72 74 00 5f 65 64 61 74  61 00 5f 65 6e 64 00     |rt._edata._end.|
0000066f

  • Call your program hw2a.asm.
  • Make sure you document it. Its header should contain:
    • Your name or names
    • Your account number or numbers (231a-xx)
    • The date
    • A copy of the output of your program
    • How to assemble, link, and run your program
  • Document your code. Use the examples seen so far in class as example of good documentation. I will not take off points this assignment for bad documentation, but will give you feedback. As we progress this semester, I will post solutions for the assignments, and these will be edited by me to reflect good documentation practices.

Submission

Submit your program from your account on beowulf (or directly from one of the Fedora machines in FH342) as follows:

 rsubmit hw2 hw2a.asm

Extra Credit

You get 1/3 extra point if you use the exact same variables as my original program!

Note: I will grade using the Smith scale: A = 4 points, A- = 3.7 points, B+ = 3.3 points, etc... 1/3 point extra credit makes for A+ for the total grade on Problem 1.

Problem #2

Write an assembly language program that outputs this:

 [231a@beowulf ~/temp]$ ./hw2b
 *********************
 *********************
 *********************
 *********************
 *********************
 *********************
 [231a@beowulf ~/temp]$ 

The output consists of 6 lines of stars.

Requirements

Make the size of your executable as small as possible! In other words, figure out a way to make the strings in your data section small, and the number of time you print small as well, so that the total size of your executable is as small as possible.

You must use these two commands to create your executable:

nasm -f elf -F stabs hw2b.asm
ld -melf_i386 -o hw2b hw2b.o

Submission

rsubmit hw2 hw2b.asm

Problem #3

I have written a program called hw2c.asm, for which you can see the output, and the code section, but not the data section. Your assignment is to recreate this data section, so that your program's output will be the same, exactly the same as mine (i.e. same number of spaces, same number of blank lines), using the same code section as given below.

Output

Here's the output of my program, sandwiched between two Linux prompts:

[231a@beowulf ~/]$ ./hw2c
I hate quotations.  Tell me what you know.

        Ralph Waldo Emerson (1803 - 1882)

[231a@beowulf ~/]$ 

Code Section

Here's the code section of my program, as given by the -l (list) switch when invoking nasm:

    32                                  		section	.text
    33                                  		global	_start
    34                                  _start:	
    35 00000000 B804000000              		mov	eax, 4
    36 00000005 BB01000000              		mov	ebx, 1
    37 0000000A B9[34000000]            		mov	ecx, msg1
    38 0000000F BA14000000              		mov	edx, msg1Len
    39 00000014 CD80                    		int	0x80
    40                                  
    41 00000016 B804000000              		mov	eax, 4
    42 0000001B BB01000000              		mov	ebx, 1
    43 00000020 B9[00000000]            		mov	ecx, msg2
    44 00000025 BA16000000              		mov	edx, msg2Len
    45 0000002A CD80                    		int	0x80
    46                                  
    47 0000002C B804000000              		mov	eax, 4
    48 00000031 BB01000000              		mov	ebx, 1
    49 00000036 B9[32000000]            		mov	ecx, msg5
    50 0000003B BA02000000              		mov	edx, msg5Len
    51 00000040 CD80                    		int	0x80
    52                                  
    53 00000042 B804000000              		mov	eax, 4
    54 00000047 BB01000000              		mov	ebx, 1
    55 0000004C B9[16000000]            		mov	ecx, msg3
    56 00000051 BA1C000000              		mov	edx, msg3Len
    57 00000056 CD80                    		int	0x80
    58                                  
    59 00000058 B804000000              		mov	eax, 4
    60 0000005D BB01000000              		mov	ebx, 1
    61 00000062 B9[48000000]            		mov	ecx, msg4
    62 00000067 BA0D000000              		mov	edx, msg4Len
    63 0000006C CD80                    		int	0x80
    64                                  
    65 0000006E B804000000              		mov	eax, 4
    66 00000073 BB01000000              		mov	ebx, 1
    67 00000078 B9[32000000]            		mov	ecx, msg5
    68 0000007D BA02000000              		mov	edx, msg5Len
    69 00000082 CD80                    		int	0x80
    70                                  
    71                                  ;;; exit
    72 00000084 BB00000000              		mov	ebx, 0
    73 00000089 B801000000              		mov	eax, 1
    74 0000008E CD80                    		int	0x80
    75                                  
    76                                  

Your Assignment

Copy exactly the series of instructions above into your code section. Use the same variable names (msg1, msg2, msg3, msg4, and msg5). Create a data section in your program and create msg1, msg2, msg3, msg4, msg5 in it, such that the order in which you list them, and the length of characters of each string will match exactly the order and the length of my variables.

Submission

Call your program hw2c.asm and submit it as follows:

   rsubmit hw2 hw2c.asm