如何将用户输入的任何字符转换为相应的十进制值?我只是很难开始工作。
该方案必须实现以下目标:
发布于 2014-03-27 15:34:17
正如所提出的,这个问题有点不清楚:输入已经是一个十进制值。
如果您真的是指如何将输入转换为二进制表示,例如,您可以对其进行数学计算,那么基本上从每个字符值中减去48 (30h),将每个数字转换为一个数字值。
请参阅asciitable.com
如果有多个输入数字,则在它们上循环,每次迭代时将累加器乘以10,最后一次迭代除外。
发布于 2014-12-05 19:45:06
很明显,你在这里问的是同样的问题:LC3汇编语言程序
如果你发布你的代码,这将在未来有所帮助。
我没有按照需要进行转换来处理这种类型的问题,而是做了一些检查,看看数字是什么,并打印了一个等价的字符串。希望我的节目能给你一些想法:
.ORIG x3000 ; start at x3000 above system memory
LEA R0, CLASS ; load address of string CLASS in R0
PUTS ; use PUTS to output string to console
LEA R0, MYNAME ; repeat steps for class template
PUTS
LEA R0, PRNUM
PUTS
LEA R0, NWLINE
PUTS
; now get a character from the user and echo it back
; using the prompts INPROM and OUTPROM
ASKINP LEA R0, INPPROM
PUTS
GETC ; get a character from the keyboard
ADD R2,R0,#0 ; move the value in R0 to R2 for later comparisons
; PROCESS THE INPUT
; first figure out if they entered a non-printing character with ASCII code
; <32. If so, suppress the printing of the character and give the user the
; standard error that they have not entered a number. We do this by subtracting
; 33 from the input and if the CC is negative, it's a non-printing character.
; For purposes of this program a space is considered a non-printing character.
ADD R2, R2, #-15
ADD R2, R2, #-15
ADD R2, R2, #-3 ; subtracted 33, see if it's negative
BRn XERR ; if so branch to error message
; if we're still here, then it's a printable character and we continue here...
OUT ; echo the character back on the input line
LEA R0, SPACE ; need a space after the input
PUTS
AND R0, R0, #0 ; set the condition to zero again
; figure out what character the user entered, and we have already subtracted 33 from
; the entry. See if it's a ! and the user wants to end. If so, the CC
; will be Zero and we break to XDONE.
; if that's not it, subtract another 15 (for a total subtracted of 48) and
; successively test to see if it's a number match. If there is no match,
; then print out that the user has not made a correct entry
; now we subtracted 33 so if they entered ! we now have 0 in R2, subtract 0
; and test the CC to see if it's Zero.
ADD R1, R2, #0
BRz XDONE
; if we have not just branched, subtract another 15 and keep testing
ADD R2, R2, #-15
ADD R1, R2, #-9
BRz XNINE
ADD R1, R2, #-8
BRz XEIGHT
ADD R1, R2, #-7
BRz XSEVEN
ADD R1, R2, #-6
BRz XSIX
ADD R1, R2, #-5
BRz XFIVE
ADD R1, R2, #-4
BRz XFOUR
ADD R1, R2, #-3
BRz XTHREE
ADD R1, R2, #-2
BRz XTWO
ADD R1, R2, #-1
BRz XONE
ADD R1, R2, #0
BRz XZERO
; not a quit signal or number, need to print out an error and start again
BRnzp XERR
; here is the section that prints out the string related to the
; number that was entered, by loading the string into R0 and
; using PUTS to print it out, then BReak back to the beginning
; of the input sequence and ask again. Pre-condition is that the
; user typed in a number for 0-9, if not they will get an error
; elsewhere in the program
XZERO LEA R0, ZERO
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XONE LEA R0, ONE
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XTWO LEA R0, TWO
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XTHREE LEA R0, THREE
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XFOUR LEA R0, FOUR
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XFIVE LEA R0, FIVE
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XSIX LEA R0, SIX
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XSEVEN LEA R0, SEVEN
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XEIGHT LEA R0, EIGHT
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XNINE LEA R0, NINE
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XERR LEA R0, INPERR
PUTS
LEA R0, NWLINE
PUTS
BRnzp ASKINP
XDONE LEA R0, DONE
PUTS
LEA R0, NWLINE
PUTS
HALT
; store the following strings with these labels
NWLINE .STRINGZ "\n"
SPACE .STRINGZ " "
CLASS .STRINGZ "CS2810\n"
MYNAME .STRINGZ "James Lohse\n"
PRNUM .STRINGZ "Project 3\n"
BYEBYE .STRINGZ "Program execution terminated!\n"
INPPROM .STRINGZ "Input a number 0-9: "
INPERR .STRINGZ "Error! You did not input a number."
DONE .STRINGZ "Done!"
ZERO .STRINGZ "zero"
ONE .STRINGZ "one"
TWO .STRINGZ "two"
THREE .STRINGZ "three"
FOUR .STRINGZ "four"
FIVE .STRINGZ "five"
SIX .STRINGZ "six"
SEVEN .STRINGZ "seven"
EIGHT .STRINGZ "eight"
NINE .STRINGZ "nine "
.END
https://stackoverflow.com/questions/22691664
复制相似问题