Microsoft Word - 210 A2.docx 1 COMPSCI 210 Assignment 2 Due date: 21:00 3rd June 2019 Total marks: 80 This assignment aims to give you some experience with C programming and to help you gain...

This assignment aims to give you some experience with C programming and to help you gainbetter understanding of the ISA of LC‐3.


Microsoft Word - 210 A2.docx 1    COMPSCI 210  Assignment 2  Due date: 21:00   3rd June 2019  Total marks: 80    This assignment aims  to give you  some experience with C programming and  to help you gain  better understanding of the ISA of LC‐3.  Important Notes   There are subtle differences between various C compilers. We will use the GNU compiler gcc  on login.cs.auckland.ac.nz for marking. Therefore, you MUST ensure that your submissions  compile  and  run  on  login.cs.auckland.ac.nz.  Submissions  that  fail  to  compile  or  run  on  login.cs.auckland.ac.nz will attract NO marks.   Markers will compile your program using command “gcc –o name name.c” where name.c is  the name of the source code of your program, e.g. part1.c. That is, the markers will NOT use  any compiler switches to supress the warning messages.   Markers  will  use  machine  code  that  is  different  from  the  examples  given  in  the  specifications when testing your programs.   The outputs of your programs will be checked by a program. Thus, your program’s outputs  MUST be  in the EXACTLY SAME FORMAT as shown  in the example given  in each part. You  must make sure that the registers appear  in the same order as shown in the example and  there are no extra lines.   The files containing the examples can be downloaded from Canvas and unpacked on server  with the command below:  o tar xvf A2Examples.tar.gz  As we  need  to  return  the  assignment marks  before  the  exam of  this  course,  there  is NO  possibility to extend the deadline for this assignment.      Academic Honesty  Do NOT copy other people's code (this includes the code that you find on the Internet).  We will use Stanford's MOSS tool  to check all  submissions. The  tool  is very "smart". Changing  the  names  of  the  variables  and  shuffling  the  statements  around  will  not  fool  the  tool.  In  previous  years,  quite  a  few  students had been  caught by  the  tool;  and,  they were dealt with  according  to  the  university’s  rules  at  https://www.auckland.ac.nz/en/about/learning‐and‐ teaching/policies‐guidelines‐and‐procedures/academic‐integrity‐info‐for‐students.html    In this assignment, you are required to write C programs to implement a LC‐3 emulator. That is,  the programs will execute the binary code generated by LC‐3 assembler.  2      Part 1 (40 marks)  LC3Edit  is used  to write LC‐3 assembly programs. After a program  is written, we use  the LC‐3  assembler  (i.e.  the  “Translate   Assemble”  function  in  LC3Edit)  to  convert  the  assembly  program  into  binary  executable.  The  binary  executable  being  generated  by  LC3Edit  is  named  “file.obj” where “file” is the name of the assembly program (excluding the “.asm” suffix). In this  specification,  a  “word”  refers  to  a  word  in  LC‐3.  That  is,  a  word  consists  of  two  bytes.  The  structure of the “file.obj” is as below:   The first word (i.e. the first two bytes) is the starting address of the program.   The subsequent words correspond to the instructions in the assembly program and the  contents of the memory locations reserved for the program using various LC‐3 directives.   In  LC‐3,  data  are  stored  in  Big‐endian  format  (refer  to  https://en.wikipedia.org/wiki/Endianness  to  learn more  about  Big‐endian  format).  For  example, if byte 0x12 in word 0x1234 is stored at address 0x3000, byte 0x34 is stored at  address 0x3001. This means, when you read a sequence of bytes from the executable of  an LC‐3 assembly program from a file, the most significant bit of each word is read first.  In this part of the assignment, you are required to write a C program to display each word in the  “.obj” file of a program in hexadecimal form. That is, the C program should display each binary  number stored in the “.obj” file in it corresponding hexadecimal form.   Name the C program as “part1.c”.    The name of the “.obj” file (the name of the file INCLUDES the “.obj” suffix) must be  given  as  a  command  line  argument.  The  number  of  instructions  in  the  file  is  NOT  limited.   In the output, each line shows the contents of one word.   The value of each word must have a “0x” prefix.   The letter digits “a” to “f” must be shown as lowercase letters.    Here is an example of the execution of the program. In this example, the LC‐3 assembly program  is  as  below.  The  name  of  the  executable  of  the  assembly  program  is  “p1.obj”  (markers  will  probably use a file with a different name and different contents).   .ORIG X4500 LD R0, A LEA R1, B LDI R2, C AND R3, R0, R1 AND R3, R1, #0 NOT R4, R3 ADD R4, R4, #1 BRp F ADD R3, R3, #1 3    F HALT A .FILL X560A B .FILL X4507 C .FILL X4501 .END   The execution of the program is shown below. In this example, the name of the file containing  the machine instructions is p1.obj (NOTE: “p1.obj” is the exact name of the file. That is, the file  name does NOT have a ‘.txt’ suffix.). The command line argument is marked in red.  $ ./part1 p1.obj 0x4500 0x2009 0xe209 0xa409 0x5601 0x5660 0x98ff 0x1921 0x0201 0x16e1 0xf025 0x560a 0x4507 0x4501     Part 2 (26 marks)  In this part, you are required to write a C program to implement a LC‐3 emulator that is capable  of executing instruction “LD”.    Name the C program as “part2.c”.    The name of the “.obj” file (the name of the file INCLUDES the “.obj” suffix) must be  given  as  a  command  line  argument.  The  number  of  instructions  in  the  file  is  NOT  limited.    It should be assumed that the “.obj” file contains at most 100 LC‐3 machine instructions.   The state of the emulator consists of the contents of the 8 general purpose registers (i.e.  R0  to  R7),  the  value  of  the  program  counter  (i.e.  PC),  the  contents  of  the  instruction  register (i.e. IR), and the value of the condition code (i.e. CC).    The values in R0 to R7, PC and IR should be shown as hexadecimal value. The value of CC  is either N, Z or P.   Before the emulator starts executing a program, it should first display the initial state of  the LC‐3 machine. In the initial state, R0 to R7 and IR should all be 0; PC should be the  starting address of the program to be executed; and CC should be set to Z.    When displaying the value of R0 to R7, PC, IR and CC, a tab character (denoted as “\t” in  C) is used to separate the name of the register and the value of the register.   4     Each  hexadecimal  value must  have  a  “0x”  prefix.  The  letter  digits  “a”  to  “f” must  be  shown as lowercase letters.   After showing the initial state, the emulator should execute each instruction except the  “HALT” pseudo  instruction  in the “.obj”  file. For this part,  the emulator should display  the hexadecimal code of each LD instruction that has been executed and the state of the  LC‐3  machine  after  each  LD  instruction  is  executed.  The  hexadecimal  code  of  an  instruction is the hexadecimal form of the 16 bits used to represent the instruction. The  hexadecimal  code  of  each  LD  instruction  should  be  preceded  with  “after  executing  instruction\t” (where \t denotes a tab character) and “0x”.    The emulator should output a line consisting of 18 “=” after displaying the state of the  LC‐3 machine.   When the execution reaches the “HALT” instruction, the emulator terminates.   Here is an example of the execution of the program. In this example, the LC‐3 assembly program  is as below. The name of the executable of the assembly program is “p2.obj” (NOTE: “p2.obj” is  the  exact  name  of  the  file.  That  is,  the  file  name  does NOT  have  a  ‘.txt’  suffix). Markers will  probably use a file with a different name and different contents.   .ORIG X4500 LD R0, A F HALT A .FILL X560A B .FILL X4507 C .FILL X4501 .END  The execution of the program is shown below. The command line argument is marked in red.  $ ./part2 p2.obj Initial state R0 0x0000 R1 0x0000 R2 0x0000 R3 0x0000 R4 0x0000 R5 0x0000 R6 0x0000 R7 0x0000 PC 0x4500 IR 0x0000 CC Z ================== after executing instruction 0x2001 R0 0x560a R1 0x0000 R2 0x0000 R3 0x0000 R4 0x0000 R5 0x0000 R6 0x0000 R7 0x0000 PC 0x4501 IR 0x2001 CC P 5    ==================    Part 3 (2 marks)  This part is based on Part 2.    Name this program as part3.c   Expand  the  functionality  of  the  emulator  in  part  2  to  allow  the  emulator  to  execute  instruction “LEA”.   For this part, the emulator should display the hexadecimal code of each LEA instruction  that has been executed and the state of the LC‐3 machine after each LEA instruction is  executed. The hexadecimal code of each LEA instruction should be preceded with “after  executing instruction\t” (where \t denotes a tab character) and “0x”.    The emulator should output a line consisting of 18 “=” after displaying the state of the  LC‐3 machine.  Here is an example of the execution of the program. In this example, the LC‐3 assembly program  is as below. The name of the executable of the assembly program is “p3.obj” (NOTE: “p3.obj” is  the  exact name of  the  file.  That  is,  the  file  name does NOT have a  ‘.txt’  suffix.). Markers will  probably use a file with a different name and different contents.   .ORIG X4500 LD R0, A LEA R1, B F HALT A .FILL X560A B .FILL X4507 C .FILL X4501 .END    The execution of the program is shown below. The command line argument is marked in red.  $ ./part3 p3.obj after executing instruction 0xe202 R0 0x560a R1 0x4504 R2 0x0000 R3 0x0000 R4 0x0000 R5 0x0000 R6 0x0000 R7 0x0000 PC 0x4502 IR 0xe202 CC P ==================   Part 4 (2 marks)  This part is based on Part 3.   6     Name this program as part4.c   Expand  the  functionality  of  the  emulator  in  part  3  to  allow  the  emulator  to  execute  instruction “LDI”.   For this part, the emulator should display the hexadecimal code of each LDI instruction  that has been executed and the state of the LC‐3 machine after each LDI  instruction is  executed. The hexadecimal code of each LDI instruction should be preceded with “after  executing instruction\t” (where \t denotes a tab character) and “0x”.    The emulator should output a line consisting of 18 “=” after displaying the state of the  LC‐3 machine.  Here is an example of the execution of the program. In this example, the LC‐3 assembly program  is as below. The name of the executable of the assembly program is “p4.obj” (NOTE: “p4.obj” is  the  exact name of  the  file.  That  is,  the  file  name does NOT have a  ‘.txt’  suffix.). Markers will  probably use a file with a different name and different contents).   .ORIG X4500 LD R0, A LEA R1, B LDI R2, C F HALT A .FILL X560A B .FILL X4507 C .FILL X4501 .END  The execution of the program is shown below. The command line arguments are marked in red.  $ ./part4 p4.obj after executing instruction 0xa403 R0 0x560a R1 0x4505 R2 0xe203 R3 0x0000 R4 0x0000 R5 0x0000 R6 0x0000 R7 0x0000 PC 0x4503 IR 0xa403 CC N ==================   Part 5 (4 marks)  This part is based on Part 4.    Name this program as part5.c   Expand  the  functionality  of  the  emulator  in  part  4  to  allow  the  emulator  to  execute  instruction “AND”.  7     For this part, the emulator should display the hexadecimal code of each AND instruction  that has been executed and the state of the LC‐3 machine after each AND instruction is  executed.  The  hexadecimal  code  of  each  AND  instruction  should  be  preceded  with  “after executing instruction\t” (where \t denotes a tab character) and “0x”.    The emulator should output a line consisting of 18 “=” after displaying the state of the  LC‐3 machine.  Here is an example of the execution of the program. In this example, the LC‐3 assembly program  is as below. The name of the executable of the assembly program is “p5.obj” (NOTE: “p5.obj” is  the  exact name of  the  file.  That  is,  the  file  name does NOT have a  ‘.txt’  suffix.). Markers will  probably use a file with a different name and different contents).  .ORIG X4500 LD R0, A LEA R1, B LDI R2, C AND R3, R0, R1 AND R3, R1, #0 F HALT A .FILL X560A B .FILL X4507 C .FILL X4501 .END    The execution of the program is shown below. The command line arguments are marked in red.  $ ./part5 p5.obj after executing instruction 0x5601 R0 0x560a R1 0x4507 R2 0xe205 R3 0x4402 R4 0x0000 R5 0x0000 R6 0x0000 R7 0x0000 PC 0x4504 IR 0x5601 CC P ================== after executing instruction 0x5660 R0 0x560a R1 0x4507 R2 0xe205 R3 0x0000 R4 0x0000 R5 0x0000 R6 0x0000 R7 0x0000 PC 0x4505 IR 0x5660 CC Z ==================   Part 6 (2 marks)  8    This part is based on Part 5.    Name this program as part6.c   Expand  the  functionality  of  the  emulator  in  part  5  to  allow  the  emulator  to  execute  instruction “NOT”.   For this part, the emulator should display the hexadecimal code of each NOT instruction  that has been executed and the state of the LC‐3 machine after each NOT instruction is  executed.  The  hexadecimal  code  of  each  NOT  instruction  should  be  preceded  with  “after executing instruction\t” (where \t denotes a tab character) and “0x”.    The emulator should output a line consisting of 18 “=” after displaying the state of the  LC‐3 machine.  Here is an example of the execution of the program. In this example, the LC‐3 assembly program  is as below. The name of the executable of the assembly program is “p6.obj” (NOTE: “p6.obj” is  the  exact name of  the  file.  That  is,  the  file  name does NOT have a  ‘.txt’  suffix.). Markers will  probably use a file with a different name and different contents).  .ORIG X4500 LD R0, A LEA R1, B LDI R2, C AND R3, R0, R1 AND R3, R1, #0 NOT R4, R3 F HALT A .FILL X560A B .FILL X4507 C .FILL X4501 .END    The execution of the program is shown below. The command line arguments are marked in red.  $ ./part6 p6.obj after executing instruction 0x98ff R0 0x560a R1 0x4508 R2 0xe206 R3 0x0000 R4 0xffff R5 0x0000 R6 0x0000 R7 0x0000 PC 0x4506 IR 0x98ff CC N ==================   Part 7 (2 marks)  This part is based on Part 6.    Name this program as part7.c  9     Expand  the  functionality  of  the  emulator  in  part  7  to  allow  the  emulator  to  execute  instruction “ADD”.   For this part, the emulator should display the hexadecimal code of each ADD instruction  that has been executed and the state of the LC‐3 machine after each ADD instruction is  executed.  The  hexadecimal  code  of  each  ADD  instruction  should  be  preceded  with  “after executing instruction\t” (where \t denotes a tab character) and “0x”.    The emulator should output a line consisting of 18 “=” after displaying the state of the  LC‐3 machine.  Here is an example of the execution of the program. In this example, the LC‐3 assembly program  is as below. The name of the executable of the assembly program is “p7.obj” (NOTE: “p7.obj” is  the  exact name of
May 30, 2021
SOLUTION.PDF

Get Answer To This Question

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here