Expert
922 Order Completed 97 % Response Time 41 Reviews Since 2015

Professional Assembly Language Homework Helper

Sydney, Australia

Diego G

PhD. in Programming, Monash University, Australia

Profession

Professional Assembly Language Homework Helper

Skills

I graduated from MonashUniversity six years ago with a PhD. in programming and ever since, I have dedicated my life to helping students with their assignments. Being fresh from college, I had already experienced the struggle that students go through when presented with assignments and I knew assignment writing is the path I wanted to take. So in 2017, I joined ProgrammingHomeworkHelp.com and was offered a position as an assembly language homework helper. Since then I have worked with students from different parts of the world and handled many types of assignments from the various topics taught in assembly language. Among the topics with which I provide academic assistance include GNU assembler, Flat assembler, overflow flag, call stack, instruction listings, opcode, machine code, and microassembler, to name a few. If you are stuck on an assignment from any of these topics, feel free to contact me.

Get Free Quote


 Your Order has been sent successfully. We will contact you as soon as possible.
Error: Please try again

Lab report  

For this lab, we will write the LC-3 assembly code to convert temperatures given in Celsius to Fahrenheit. We need to give relevant messages to the user to guide him in using the program, for this, we make use of the TRAP x22, which displays a string on the console. Also, we require reading input from the user one character at a time, we make this by using the TRAP x23, which reads on the character from the keyboard and saves it in R0. The characters given by the user are represented in ASCII, so we must convert them to numbers before we can use them, since we know that the character for zero ‘0’ in ASCII has a value of 48, we only need to subtract this value to the read character to get the actual value. On the other hand, if we wish to display a number between 0 and 9, we need to add the 48 before we can use the TRAP x21 to display it in the console. We have a main loop that prompts the user for a selection and reads a character, then we compare the read number with 1, 2, or 3 to see which option was selected, we use simple subtraction to make the comparison, if the subtraction is zero, then that was the option selected and we branch to the part that handles the option. We have three parts to handle the input from the user; the first one is called Conv, which is executed when the user selection is 1. In this option, we prompt the user again to input another number, which will be the value to convert to Fahrenheit.  In our approach, we decided to use a table to get the conversions from Celsius to Fahrenheit. The table that provides the conversion from the values 0 to 9 to the corresponding Fahrenheit temperatures is the following:

032
133
235
337
439
541
642
744
846
948
                      Thus, the number given by the user is used as an offset on the table and we simply load the value from the given offset to get the conversion. The second part is called NoConv, which is executed when the user selects option 2. In this option, we also prompt the user to input a number but this time we don't make a conversion but simply print the input number on the console. In both the Conv and NoConv options, the converted number or the number given by the user, respectively, is saved at x3100. The last part is the EXIT, which is executed when the user selection is 3. In this case, we simply print a message and halt the program.   The resulting program is included below:   .ORIG x3000   ;set origin of program to x3000 LOOP   LEA R0, prompt; prompt for the user to select a number TRAP x22; trap to output the string TRAP x23; read a character LD R1,nascii0; load negative of ASCII 0 to convert the read character ADD R0, R0, R1; convert character to a number IF1    ADD R1, R0,#-1; see if the user entered a 1 BRz Conv; if it was 1, convert IF2    ADD R1, R0,#-2; see if the user entered a 2 BRz NoConv; if it was 2, do not convert IF3    ADD R1, R0,#-3; see if the user entered a 3 BRz EXIT; if it was a 3, exit Conv   LEA R0, ask temp; prompt for the user to give a temperature TRAP x22; trap to output the string TRAP x23; read a character LD R1,nascii0; load negative of ASCII 0 to convert the read character ADD R0, R0, R1; convert character to a number LEA R1, table; point to the conversion table with R1 ADD R1, R1, R0; add the required temperature as offset LDR R0,R1,#0  ; load value from the table STI R0, address; save the number in x3100 BR  LOOP Nov    LEA R0,asktemp       ; prompt for the user to give a temperature TRAP x22; trap to output the string TRAP x23; read a character LD R1,nascii0; load negative of ASCII 0 to convert the read character ADD R0, R0, R1; convert character to a number STI R0, address; save the number in x3100 LD  R1,ascii0; load ASCII 0 to convert the number for display ADD R0,R0,R1  ; convert to ascii TRAP x21; put the character on the console LD  R0, NL    TRAP x21; put a character on the console BR  LOOP EXIT   LEA R0,exitmsg; print exit message TRAP x22; trap to output the string HALT          ; halt the program prompt  .STRINGZ     "Enter 1 for converting to the Fahrenheit, 2 for no conversion, 3 for exit: " asktemp       .STRINGZ      "Enter the temperature in Celsius: " exitmsg       .STRINGZ      "Have a nice day" nl     .FILL  10     ; new line character nascii0       .FILL  -48    ; negative of ascii '0' ascii0 .FILL  48     ; ascii '0' address       .FILL  x3100  ; address to save conversions table  .FILL  32     ; conversion table .FILL 33 .FILL  35 .FILL  37 .FILL  39 .FILL  41 .FILL  42 .FILL  44 .FILL  46 .FILL  48 .END   A test using the input given in the assignment specification results in the following output:

Assembly Language Lab Report