实际连接示意图
仅一台macbook pro
所用器材列表
macbook一台
各项测试情况
- 生成了Thumb指令还是ARM指令
- C代码
- 通过编译参数改成,使得其编译成ARM指令或thumb指令
默认为ARM指令
加上参数-mthumb编译为thumb指令 - 汇编代码情况
用arm-linux-gnueabi-objdump –d 命令查看汇编码
ARM
thumb
对比上述汇编可知,ARM和Thumb编译的结果最大的不同是32位与16位的区别,且Thumb的指令数比ARM多,但整体上,ARM汇编结果比Thumb的大(ls –l的结果如下)
- C代码
- 对于ARM指令,能否产生条件执行的指令
- C代码
- ARM指令
观察8454的ble可知,能产生条件执行的指令。
- C代码
- 设计C的代码场景,观察是否产生了寄存器移位寻址
- C代码
- 在编译参数中加入-O开启优化:
- ARM指令
观察84a4可知,产生了寄存器移位寻址。
- C代码
- 设计C的代码场景,观察一个复杂的32位数是如何装载到寄存器的
- C代码
- ARM指令
观察可知,32位数先被存在了8460处,然后用ldr指令将之装入寄存器r3
- C代码
- 写一个C的多重函数调用的函数,观察并分析
- C代码
- ARM指令
观察和分析可知:
a) 调用时的返回地址在lr链接寄存器中,在执行bl指令时,会自动将下一条指令地址传入lr寄存器。
b) 传入的参数在r0和r1中。
c) 在函数堆栈中,本地变量存在返回地址和fp之后。
d) r0-r3是caller保存而r4是callee保存。
- C代码
- 尝试写C的表达式来编译得到MLA指令
- C代码
- ARM指令(编译参数加上-O)
在84ac处出现了mla。
- C代码
- 尝试写C的表达式来编译得到BIC指令
- C代码
- ARM指令(编译参数加上-O)
在84a0处出现了bic指令。
- C代码
- 编写一个汇编函数,接受一个整数和一个指针做为输入,指针所指应为一个字符串,该汇编函数调用C语言的 printf()函数输出这个字符串的前n个字符,n即为那个整数。在C语言写的main()函数中调用并传递参数给这个汇编函数 来得到输出。
- 代码如下(用“puts”输出字符串)
- 代码如下(用“puts”输出字符串)