【发布时间】:2014-02-28 02:58:36
【问题描述】:
所以我创建了两个名为 read_character 和 output_character 的子例程,它们基本上只是通过 uART 输出您在 PuTTy 屏幕上键入的任何内容。这两个子例程不断循环,以在屏幕上显示您键入的任何内容。基本上是输入输出。
我需要帮助创建另外两个名为 read_string 和 output_string 的子例程,它们将利用上述两个函数(read_character 和 output_character)在用户键入字符串后显示字符串。就像一旦用户键入字符串并按 ENTER 键一样,我的显示器应该将字符串返回给用户。
以下是我创建的子程序:
U0LSR EQU 0x14 ; UART0 Line Status Register
register EQU 0xE000C000
read_character
LDR r0, =0xE000C014 ;load the flag register to r0
LDRB r1, [r0] ;load byte from r0 to r1
BIC r1, r1, #0xFFFFFFFE ; bit clear and keep the first bit to check RDR
CMP r1, #0 ;compare to 0
BEQ read_character ;if 0 go back to read_character
LDR r6, =register ;if not 0, then continue and save what is in 0xE000C000 in r6
LDR r2, [r6]
;if 1 => read the byte from recieve register
;stop
output_character
LDR r0, =0xE000C014 ;load the flag register to r0
LDRB r1, [r0] ;load the byte
BIC r1, r1, #0xFFFFFFDF ;bit clear and keep the 5th bit, which is the THRE bit
MOV r1, r1, LSR #4 ;right shift to set the fifth bit as first
CMP r1, #0 ;compare to 0
BEQ output_character
LDR r6, =register
STR r2, [r6]
B read_character ;branch back to read_character to read and transmit next character
LDMFD sp!, {lr}
BX lr
【问题讨论】:
-
我知道它背后的想法是什么。我无法用文字或语法表达,所以请你帮帮我。
-
不,在那个问题中我问了另一件事。在这里我问的是不同的事情。
-
LDMFD sp!, {lr}和BX lr有什么作用?您的代码永远不会到达那些。您没有任何子例程。你有两段代码。一个人读一个字符,另一个人写它。B read_character在两个代码段上进行无限循环。如果你真的有功能,回答你的问题会更容易。也许应该有一个标志,在你问这个问题之前你需要得到另一个问题?B read_character是唯一的区别。此行不构成函数或子例程。 -
这是您所问的yet another question,我真的很难理解有什么不同和/或如何谁能给出比其他两个问题更好的答案。
标签: string assembly input arm output