×
Samples Blogs Make Payment About Us Reviews 4.9/5 Order Now

Program in LC3 Assembly Language to Enter Text Using Interrupt Handler Assignment Solution

July 10, 2024
Rehana Magnus
Rehana Magnus
🇨🇦 Canada
Assembly Language
Rehana Magnus, PhD in Computer Science from the esteemed Acadia Institute of Technology, Canada. With 6 years of experience, specializes in assembly language programming. Proficient in low-level coding, optimizing performance, and enhancing system functionality.
Key Topics
  • Instructions
  • Requirements and Specifications
Tip of the day
Use Python libraries effectively by importing only what you need. For example, if you're working with data, using libraries like pandas and numpy can save time and simplify complex tasks like data manipulation and analysis.
News
In 2024, the Biden-Harris Administration has expanded high-dosage tutoring and extended learning programs to boost academic achievement, helping programming students and others recover from pandemic-related setbacks. These initiatives are funded by federal resources aimed at improving math and literacy skills​

Instructions

Objective

Write a program in LC3 assembly language to enter text using interrupt handler.

Requirements and Specifications

Interrupt Service Routine (ISR)

In this assignment, we will use the keyboard as the input device for interrupting the main program. The ISR will start at x2600. The ISR simply reads the character typed and accepts only the symbols ‘A’, ‘C’, ‘G’, or ‘U’. Any other symbol will be ignored. Once it detects a valid symbol, it places it at location x3600.

Note, any value other than 0 at this location indicates a valid input character as the ISR only writes valid characters. Also, the ISR does not echo the character to the console. It is considered bad programming to perform time-consuming tasks like I/O inside Interrupt Service Routines.

Main Program

The main program will constantly check the location x3600 to see if there is an input character there and writes a 0to the location when it processes it. Processing an input character follows a simple algorithm which can be described by the above incomplete finite state machine (FSM). It is incomplete in that, it does not account for all inputs in all states but only presents some of the relevant inputs. You are welcome to solve the problem without the FSM as long as you implement the expected functionality. The Main program will start at x3000and will write to the screen the character it reads from x3600 , making sure it does this only once for each input entered. Also, it checks to see if a START codon (AUG) is detected. If so, it prints the pipe symbol ‘|’. After this point, it looks for a STOP codon (UAG, UAA, or UGA) so the program can terminate. (Note that for this program, the coding sequence itself does not need to be aligned in groups of 3 bases per codon. This is unlike real mRNA.)

VERY IMPORTANT:You are not allowed to use any TRAP instructions in your interrupt service routine.

To read a character that the user entered, you may not call TRAP x20(GETC) or TRAP x23(IN), or use any of the other TRAP routines. If you use TRAP in the interrupt service, your program is not correct and will fail our testing even though it may appear to work when you test it. You are free to use TRAPs in themain program. Do not forget to save and restore any registers that you use in the interrupt serviceroutine.

Screenshots of output

Program in LC3 assembly language to enter text using interrupt handler Assembly language
Program in LC3 assembly language to enter text using interrupt handler Assembly language 1
Program in LC3 assembly language to enter text using interrupt handler Assembly language 2
Program in LC3 assembly language to enter text using interrupt handler Assembly language 3
Program in LC3 assembly language to enter text using interrupt handler Assembly language 4
Program in LC3 assembly language to enter text using interrupt handler Assembly language 5

Source Code

; Program5.asm ; Name(s): ; UTEid(s): ; Continuously reads from x3600 making sure its not reading duplicate ; symbols. Processes the symbol based on the program description ; of mRNA processing. .ORIG x3000 ; set up the keyboard interrupt vector table entry ;M[x0180] <- x2600 LD R6,STACK LD R0, KBISR ; 2600 LD R1, KBINTVec ; x0180 STR R0, R1, #0 ; enable keyboard interrupts ; KBSR[14] <- 1 ==== M[xFE00] = x4000 LD R0, KBINTEN STI R0, KBSR AND R1, R1, #0 ; start in state 0 ; This loop is the proper way to read an input Loop LDI R0,GLOB BRz Loop ; Process it TRAP x21 ; echo character read ADD R2, R1, #0 ; if state is zero BRz ST0 ; go to state zero ADD R2, R1, #-1 ; if state is 1 BRz ST1 ; go to state 1 ADD R2, R1, #-2 ; if state is 2 BRz ST2 ; go to state 2 ADD R2, R1, #-3 ; if state is 3 BRz ST3 ; go to state 3 ADD R2, R1, #-4 ; if state is 4 BRz ST4 ; go to state 4 ADD R2, R1, #-5 ; if state is 5 BRz ST5 ; go to state 5 ADD R2, R1, #-6 ; if state is 6 BRz ST6 ; go to state 6 ADD R2, R1, #-7 ; if state is 7 BRz ST7 ; go to state 7 ST0 LD R2, ANEG ADD R0, R0, R2 ; compare with 'A' BRnp CLEAR ; if != 'A', clear and restart ADD R1, R1, #1 ; else jump to state 1 BRnzp CLEAR ; clear and restart ST1 LD R2, UNEG ADD R0, R0, R2 ; compare with 'U' BRz NXT2 ; if = 'U', go to next AND R1, R1, #0 ; else, reset state to 0 BRnzp CLEAR ; clear and restart NXT2 ADD R1, R0, #2 ; jump to state 2 BRnzp CLEAR ; clear and restart ST2 LD R2, GNEG ADD R0, R0, R2 ; compare with 'G' BRz NXT3 ; if = 'G', go to next AND R1, R1, #0 ; else, reset state to 0 BRnzp CLEAR ; clear and restart NXT3 ADD R1, R0, #3 ; jump to state 3 LD R0, PIPE ; load pipe symbol TRAP x21 ; print pipe BRnzp CLEAR ; clear and restart ST3 LD R2, UNEG ADD R0, R0, R2 ; compare with 'U' BRz NXT5 ; if = 'U', go to next ADD R1, R1, #1 ; else, go to state 4 BRnzp CLEAR ; clear and restart NXT5 ADD R1, R0, #5 ; jump to state 5 BRnzp CLEAR ; clear and restart ST4 LD R2, UNEG ADD R0, R0, R2 ; compare with 'U' BRz NXT5 ; if = 'U', go to state 5 BRnzp CLEAR ; else, clear and restart ST5 LD R2, ANEG ADD R0, R0, R2 ; compare with 'A' BRz NXT6 ; if = 'A', go to state 6 ADD R0, R0, #-2 ; compare with 'C' BRz NXT4 ; if = 'C', go to state 4 ADD R0, R0, #-4 ; compare with 'G' BRz NXT7 ; if = 'G', go to state 7 BRnzp CLEAR ; else, stay in 5 NXT4 ADD R1, R0, #4 ; jump to state 4 BRnzp CLEAR ; clear and restart NXT6 ADD R1, R0, #6 ; jump to state 6 BRnzp CLEAR ; clear and restart NXT7 ADD R1, R0, #7 ; jump to state 7 BRnzp CLEAR ; clear and restart ST6 LD R2, ANEG ADD R0, R0, R2 ; compare with 'A' BRz STOP ; if = 'A', terminate ADD R0, R0, #-2 ; compare with 'C' BRz NXT4 ; if = 'C', go to state 4 ADD R0, R0, #-4 ; compare with 'G' BRz STOP ; if = 'G', terminate AND R0, R0, #0 BRnzp NXT5 ; else, go to 5 ST7 LD R2, ANEG ADD R0, R0, R2 ; compare with 'A' BRz STOP ; if = 'A', terminate ADD R0, R0, #-2 ; compare with 'C' BRz NXT4 ; if = 'C', go to state 4 ADD R0, R0, #-4 ; compare with 'G' BRz NXT4 ; if = 'G', go to state 4 AND R0, R0, #0 BRnzp NXT5 ; else, go to 5 CLEAR AND R0, R0, #0 ; load zero STI R0, GLOB ; save 0 to wait for another char BRnzp Loop ; repeat loop ; Repeat unil Stop Codon detected STOP HALT KBINTVec .FILL x0180 KBSR .FILL xFE00 KBISR .FILL x2600 KBINTEN .FILL x4000 GLOB .FILL x3600 ANEG .FILL x-41 CNEG .FILL x-43 GNEG .FILL x-47 UNEG .FILL x-55 PIPE .FILL x7C STACK .FILL x3000 .END ; Interrupt Service Routine ; Keyboard ISR runs when a key is struck ; Checks for a valid RNA symbol and places it at x3600 .ORIG x2600 ST R0, OLDR0 ; save R0 ST R1, OLDR1 ; save R1 LDI R0, KBDR ; load character LD R1, ANEGISR ; load -A ADD R1, R1, R0 ; compare with 'A' BRz SAVE ; if = 'A', save LD R1, CNEGISR ; load -C ADD R1, R1, R0 ; compare with 'C' BRz SAVE ; if = 'C', save LD R1, GNEGISR ; load -G ADD R1, R1, R0 ; compare with 'G' BRz SAVE ; if = 'G', save LD R1, UNEGISR ; load -U ADD R1, R1, R0 ; compare with 'U' BRnp ISRDONE ; if != 'U', don't save SAVE STI R0, GLOB ; save char in global ISRDONE LD R0, OLDR0 ; restore R0 LD R1, OLDR1 ; restore R1 RTI OLDR0 .FILL x0 OLDR1 .FILL x0 KBDR .FILL xFE02 GLOB .FILL x3600 ANEGISR .FILL x-41 CNEGISR .FILL x-43 GNEGISR .FILL x-47 UNEGISR .FILL x-55 .END

Related Samples

Explore our collection of free assembly language assignment samples. These resources offer valuable insights and examples to help you grasp key concepts and excel in your studies. Access them now to enhance your understanding and academic performance.