ARM汇编语言的Conecept问题

时间:2018-06-01 08:56:01

标签: assembly arm

有了编程背景,我发现我仍然在使用汇编语言概念时遇到困难。到目前为止,我发现的所有在线教程都有所帮助,但我发现自己从教程跳到教程,将各种东西拼凑在一起。无论如何,我有几个关于以下ARM汇编程序的概念性问题,并感谢任何帮助和指示。

@converts a lowercase letter to an uppercase letter 
.global _start

_start:
  MOV R7, #3
  MOV R0, #0
  MOV R2, #1
  LDR R1, =character
  SWI 0

_uppercase:
  LDR R1, =character
  LDR R0, [R1]
  BIC R0, R0, #32
  STR R0, [R1]

_write:
  MOV R7, #4
  MOV R0, #1
  MOV R2, #1
  SWI 0

end:
  MOV R7, #1
  SWI 0

.data
character:
  .ascii " "
  1. 我理解系统调用是什么,例如从键盘读取或输出到屏幕,但是什么决定了哪个寄存器负责系统调用,以及我如何知道需要将哪些值传递给这些寄存器?
  2. 在该示例中,寄存器R0用于第6行中的系统调用以从键盘获取输入,然后在第13行中再次使用以将寄存器R1地址加载到其自身中。第6行的原始值/系统调用会发生什么?是否在运行期间逐行执行每一行?存储的信息在哪里,我将从键盘输入信息(第6行)?
  3. 与问题2类似,我将字的地址存储到第15行的寄存器R0,但是在第19行进行系统调用以使用相同的寄存器输出到存储器。从第15行存储在寄存器R0中的存储器地址发生了什么?
  4. 为什么每个标签部分必须有一个SWI 0?为什么_uppercase部分没有SWI 0?
  5. 为什么终止程序需要在SWI 0之前进行系统调用(第24行)?
  6. 提前感谢您的回答,我希望这篇文章可以帮助其他人了解一些ARM概念。

0 个答案:

没有答案