does anyone know how to program on LC2? its assembly...
i have a program i did for my final project... i dont know how to do the reverse converting hex to decimal
;Build a decimal to hex converter that prompts the user to enter from the keyboard
;a positive whole number (decimal) less than 65,536, and outputs the hexadecimal
;representation of that number.
;The program should allow the user to continue inputting decimal numbers as often as
;desired, indicating termination by an input of -1
;********this program does not allow user to input invalid character and numbers******
.ORIG x3000
START AND R5,R5,#0 ;counter for a max of 5 digits
ADD R5,R5,#5
AND R6,R6,#0
ST R6, SIGNBIT
LEA R0,BEGIN
TRAP x22 ;puts-displays string message
POUND TRAP x20 ;getc
LD R1,Num ;#
ADD R1,R1,R0 ;number from console goes to r0
BRz SignFirst
LD R1, Minus ;checks for minus
ADD R1,R1,R0
BRz SetSign ;if user enters pound
LD R1,Plus ;checks for plus
ADD R1,R1,R0
BRz OutChar
LD R1,Nine ;checks for invalid characters
ADD R1,R1,R0
BRp POUND
ADD R1,R1,#10 ;invalid go back to test
ADD R1,R1,R0
BRnz POUND
BRp Num2
SignFirst TRAP x21 ;r0->out
SignNum TRAP x20 ;getc
LD R1, Minus ;checks for minus
ADD R1,R1,R0
BRz SetSign ;if user enters pound
LD R1,Plus ;checks for plus
ADD R1,R1,R0
BRz OutChar
LD R1,Nine ;checks for invalid characters
ADD R1,R1,R0
BRp SignNum
ADD R1,R1,#10 ;invalid go back to SignNum
BRnz SignNum
BRp Num2
SetSign LEA R1,SIGNBIT
AND R2,R2,#0
ADD R2,R2,#1
STR R2,R1,#0 ;store r1 with 1 if it is a negative value
TRAP x21 ;out-minus sign
BRnzp InNum
OutChar TRAP x21 ;out
InNum TRAP x20 ;getc
LD R1,Enter ;checks for return
ADD R1,R1,R0
BRz EndInput
LD R1,Nine ;checks if number is valid go to Num2
ADD R1,R1,R0
BRp InNum
ADD R1,R1,#10
BRnz InNum
Num2 LD R1, Overflow
ADD R4, R1, R6
BRp InNum
BRz CheckMax
ValidNum JSR Mult10toR6 ;r6=0 initially, times
TRAP x21 ;out
LD R1,Zero
ADD R0,R0,R1
ADD R6,R6,R0
BRz InNum
ADD R5,R5,#-1 ;decrement
BRz EndInput
BRnzp InNum
CheckMax LD R1,Zero
ADD R0,R0,R1
ADD R4,R0,#-5
Brp InNum
LD R1,Ascii
ADD R0,R0,R1
BRnzp ValidNum
EndInput LD R1,SIGNBIT
BRnz Alter
BRnzp EXIT ;End with negative input
Alter LEA R0,ANSWER
TRAP x22 ;PUTS
AND R1,R1,#0 ;starts the loop to display hex value
ADD R1,R1,#4 ;r1 is counter for individual 4 bits as a group
;takes first 4 bits and converts to hex value
Loop JSR Left4 ;determines what first 4 bits are
LD R2,Mask ;x000F
AND R0,R6,R2
LD R4,Ascii ;x0030
ADD R0,R0,R4
LD R3,Nine ;x-39
ADD R3,R3,R0
BRnz Hex
LD R3,Letter ;x0007
ADD R0,R0,R3
Hex TRAP x21 ;out
ADD R1,R1,#-1
BRp Loop ;goes back up to LOOP and do next four bits
LD R0, QUIT
TRAP x21 ;out
BRnzp START
EXIT HALT ;quit
Mult10toR6 ST R4, SaveR4
ST R3, SaveR3
ADD R4,R6,R6 ;multiply 10 to r6
ADD R3,R4,R4
ADD R3,R3,R3
ADD R3,R3,R4
ADD R6,R3,#0
LD R4, SaveR4
LD R3, SaveR3
RET
Left4 AND R4,R4,#0 ;bit shift 4 times
ADD R4,R4,#4
ShiftLeft AND R6,R6,R6
BRzp Shift ;if r6 is zero or positive jmp to shift
ADD R6,R6,R6
ADD R6,R6,#1
ADD R4,R4,#-1
BRp ShiftLeft
RET
Shift ADD R6,R6,R6 ;bit shift
ADD R4,R4,#-1 ;decrement
BRp ShiftLeft
RET
SaveR0 .BLKW 1
SaveR1 .BLKW 1
SaveR2 .BLKW 1
SaveR3 .BLKW 1
SaveR4 .BLKW 1
SaveR5 .BLKW 1
SaveR6 .BLKW 1
SaveR7 .BLKW 1
Mask .FILL x000F
Ascii .FILL x0030
Letter .FILL x0007
Overflow .FILL xE667
Minus .FILL xFFD3 ;x-2D
Plus .FILL xFFD5 ;x-2B
Nine .FILL xFFC7 ;x-39
Enter .FILL xFFF6 ;x-0A
Num .FILL xFFDD ;x-23
Zero .FILL xFFD0 ;x-30
BEGIN .FILL x000A
.STRINGZ "Please enter a number :"
ANSWER .FILL x000A
.STRINGZ " Hex :x"
SIGNBIT .FILL 0
QUIT .FILL x000A ;returnline
.END
i have a program i did for my final project... i dont know how to do the reverse converting hex to decimal
;Build a decimal to hex converter that prompts the user to enter from the keyboard
;a positive whole number (decimal) less than 65,536, and outputs the hexadecimal
;representation of that number.
;The program should allow the user to continue inputting decimal numbers as often as
;desired, indicating termination by an input of -1
;********this program does not allow user to input invalid character and numbers******
.ORIG x3000
START AND R5,R5,#0 ;counter for a max of 5 digits
ADD R5,R5,#5
AND R6,R6,#0
ST R6, SIGNBIT
LEA R0,BEGIN
TRAP x22 ;puts-displays string message
POUND TRAP x20 ;getc
LD R1,Num ;#
ADD R1,R1,R0 ;number from console goes to r0
BRz SignFirst
LD R1, Minus ;checks for minus
ADD R1,R1,R0
BRz SetSign ;if user enters pound
LD R1,Plus ;checks for plus
ADD R1,R1,R0
BRz OutChar
LD R1,Nine ;checks for invalid characters
ADD R1,R1,R0
BRp POUND
ADD R1,R1,#10 ;invalid go back to test
ADD R1,R1,R0
BRnz POUND
BRp Num2
SignFirst TRAP x21 ;r0->out
SignNum TRAP x20 ;getc
LD R1, Minus ;checks for minus
ADD R1,R1,R0
BRz SetSign ;if user enters pound
LD R1,Plus ;checks for plus
ADD R1,R1,R0
BRz OutChar
LD R1,Nine ;checks for invalid characters
ADD R1,R1,R0
BRp SignNum
ADD R1,R1,#10 ;invalid go back to SignNum
BRnz SignNum
BRp Num2
SetSign LEA R1,SIGNBIT
AND R2,R2,#0
ADD R2,R2,#1
STR R2,R1,#0 ;store r1 with 1 if it is a negative value
TRAP x21 ;out-minus sign
BRnzp InNum
OutChar TRAP x21 ;out
InNum TRAP x20 ;getc
LD R1,Enter ;checks for return
ADD R1,R1,R0
BRz EndInput
LD R1,Nine ;checks if number is valid go to Num2
ADD R1,R1,R0
BRp InNum
ADD R1,R1,#10
BRnz InNum
Num2 LD R1, Overflow
ADD R4, R1, R6
BRp InNum
BRz CheckMax
ValidNum JSR Mult10toR6 ;r6=0 initially, times
TRAP x21 ;out
LD R1,Zero
ADD R0,R0,R1
ADD R6,R6,R0
BRz InNum
ADD R5,R5,#-1 ;decrement
BRz EndInput
BRnzp InNum
CheckMax LD R1,Zero
ADD R0,R0,R1
ADD R4,R0,#-5
Brp InNum
LD R1,Ascii
ADD R0,R0,R1
BRnzp ValidNum
EndInput LD R1,SIGNBIT
BRnz Alter
BRnzp EXIT ;End with negative input
Alter LEA R0,ANSWER
TRAP x22 ;PUTS
AND R1,R1,#0 ;starts the loop to display hex value
ADD R1,R1,#4 ;r1 is counter for individual 4 bits as a group
;takes first 4 bits and converts to hex value
Loop JSR Left4 ;determines what first 4 bits are
LD R2,Mask ;x000F
AND R0,R6,R2
LD R4,Ascii ;x0030
ADD R0,R0,R4
LD R3,Nine ;x-39
ADD R3,R3,R0
BRnz Hex
LD R3,Letter ;x0007
ADD R0,R0,R3
Hex TRAP x21 ;out
ADD R1,R1,#-1
BRp Loop ;goes back up to LOOP and do next four bits
LD R0, QUIT
TRAP x21 ;out
BRnzp START
EXIT HALT ;quit
Mult10toR6 ST R4, SaveR4
ST R3, SaveR3
ADD R4,R6,R6 ;multiply 10 to r6
ADD R3,R4,R4
ADD R3,R3,R3
ADD R3,R3,R4
ADD R6,R3,#0
LD R4, SaveR4
LD R3, SaveR3
RET
Left4 AND R4,R4,#0 ;bit shift 4 times
ADD R4,R4,#4
ShiftLeft AND R6,R6,R6
BRzp Shift ;if r6 is zero or positive jmp to shift
ADD R6,R6,R6
ADD R6,R6,#1
ADD R4,R4,#-1
BRp ShiftLeft
RET
Shift ADD R6,R6,R6 ;bit shift
ADD R4,R4,#-1 ;decrement
BRp ShiftLeft
RET
SaveR0 .BLKW 1
SaveR1 .BLKW 1
SaveR2 .BLKW 1
SaveR3 .BLKW 1
SaveR4 .BLKW 1
SaveR5 .BLKW 1
SaveR6 .BLKW 1
SaveR7 .BLKW 1
Mask .FILL x000F
Ascii .FILL x0030
Letter .FILL x0007
Overflow .FILL xE667
Minus .FILL xFFD3 ;x-2D
Plus .FILL xFFD5 ;x-2B
Nine .FILL xFFC7 ;x-39
Enter .FILL xFFF6 ;x-0A
Num .FILL xFFDD ;x-23
Zero .FILL xFFD0 ;x-30
BEGIN .FILL x000A
.STRINGZ "Please enter a number :"
ANSWER .FILL x000A
.STRINGZ " Hex :x"
SIGNBIT .FILL 0
QUIT .FILL x000A ;returnline
.END
