Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .ORIG x3000
- ;--------------
- ; Instructions
- ;--------------
- START_LOOP
- LEA R0, PROMPT
- PUTS
- GETC
- OUT
- LD R3, CHAR_B
- ADD R4, R0, R3
- BRnp ERROR_OUT
- BRnzp CONTINUE_PROGRAM
- END_START_LOOP
- ERROR_OUT
- LEA R0, ERROR
- PUTS
- BRnzp START_LOOP
- END_ERROR_OUT
- CONTINUE_PROGRAM
- LD R1, SUB_BINARY_READER_3200
- JSRR R1
- LD R0, NEWLIN
- OUT
- JSR SUB_BINARY_WRITER_3400
- END_CONTINUE_PROGRAM
- HALT
- ;---------------
- ; Local data
- ;---------------
- PROMPT .STRINGZ "Enter a 16-bit 2's complement binary number\n"
- ERROR .STRINGZ "\nFirst character is not b\n"
- SUB_BINARY_READER_3200 .FILL x3200
- CHAR_B .FILL #-98
- NEWLIN .FILL '\n'
- ;-------------------------
- ; Subroutine
- ;-------------------------
- .ORIG x3200
- ;-------------------------
- ; Subroutine Instructions
- ;-------------------------
- ST R7, BACKUP_R7_3200
- ST R1, BACKUP_R1_3200
- LD R2, TOTAl
- LD R5, COUNTER
- INPUT_LOOP_3200
- LD R4, RESET
- GETC
- OUT
- LD R3, SPACE_CHAR
- ADD R4, R0, R3
- BRz INPUT_LOOP_3200
- BRnp ZERO_INPUT
- ZERO_INPUT
- LD R4, RESET
- LD R3, ZERO
- ADD R4, R0, R3
- BRz ADD_ZERO
- BRnp ONE_INPUT
- ONE_INPUT
- LD R4, RESET
- LD R3, ONE
- ADD R4, R0, R3
- BRz ADD_ONE
- BRnp OTHER_INPUT
- OTHER_INPUT
- LEA R0, ERROR_MSG
- PUTS
- BRnzp INPUT_LOOP_3200
- ADD_ZERO
- ADD R2, R2, R2
- BRnzp INPUT_LOOP_CONT
- ADD_ONE
- ADD R2, R2, R2
- ADD R2, R2, #1
- BRnzp INPUT_LOOP_CONT
- INPUT_LOOP_CONT
- ADD R5, R5, #-1
- BRp INPUT_LOOP_3200
- BRz END_LOOP_3200
- END_LOOP_3200
- LD R1, BACKUP_R1_3200
- LD R7, BACKUP_R7_3200
- RET
- ;-----------------
- ; Subroutine data
- ;-----------------
- BACKUP_R7_3200 .BLKW #1
- BACKUP_R1_3200 .BLKW #1
- TOTAl .FILL #0
- COUNTER .FILL #16
- NEWLINE .FILL '\n'
- ERROR_MSG .STRINGZ "\nEnter valid character\n"
- SPACE_CHAR .FILL #-32
- ZERO .FILL #-48
- ONE .FILL #-49
- RESET .FILL #0
- ;-------------------------
- ; Subroutine
- ;-------------------------
- .ORIG x3400
- ;-------------------------
- ; Subroutine Instructions
- ;-------------------------
- SUB_BINARY_WRITER_3400
- ST R7, BACKUP_R7_3400
- LD R4, CNTR
- LD R5, SPACE_COUNTER
- LD R0, CHAR_B_3400
- OUT
- FOR_LOOP
- ADD R2, R2, #0
- BRn PRINT_1
- ADD R2, R2, #0
- BRzp PRINT_0
- END_FOR_LOOP
- PRINT_1
- LD R0, NUM_ONE
- OUT
- ADD R2, R2, R2
- ADD R4, R4, #-1
- BRz LOOP_END
- ADD R5, R5, #-1
- BRz PRINT_SPACE
- ADD R4, R4, #0
- BRp FOR_LOOP
- END_PRINT_1
- PRINT_0
- LD R0, NUM_ZERO
- OUT
- ADD R2, R2, R2
- ADD R4, R4, #-1
- BRz LOOP_END
- ADD R5, R5, #-1
- BRz PRINT_SPACE
- ADD R4, R4, #0
- BRp FOR_LOOP
- END_PRINT_0
- PRINT_SPACE
- LD R0, SPACE
- OUT
- LD R5, SPACE_COUNTER
- ;ADD R2, R2, R2
- ADD R5, R5, #0
- BRp FOR_LOOP
- END_PRINT_SPACE
- LOOP_END
- LD R0, NEWLINES
- OUT
- LD R7, BACKUP_R7_3400
- RET
- ;-----------------
- ; Subroutine data
- ;-----------------
- BACKUP_R7_3400 .BLKW #1
- NUM_ZERO .FILL #48
- NUM_ONE .FILL #49
- CNTR .FILL #16
- SPACE_COUNTER .FILL #4
- NEWLINES .FILL '\n'
- SPACE .FILL ' '
- CHAR_B_3400 .FILL 'b'
- .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement