# Lab1 Note
###### tags: `NCTU` `MPSL`
### Question 實驗課問題
#### Question 1 (for lab 3-1):
- **What is the IT-block for ARM Assembly? ARM 組合語言中的 IT-block 指的是甚麽?**
The `IT` (If-Then) instruction makes up to four following instructions (the *IT block*) conditional. The conditions can be all the same, or some of them can be the logical inverse of the others.
With IT instruction, you can specify condition code for up to 4 instructions. For each instruction, you specify if it's part of the If (T) or Else (E).
#### For example:
```c
ITTET EQ
ADD r0,r0,r0
ADD r1,r0,r0
ADD r2,r0,r0
ADD r3,r0,r0
```
#### Will actually translate to:
```c
ADDEQ r0,r0,r0 (Always if for 1st one)
ADDEQ r1,r0,r0 (T for 2nd one)
ADDNE r2,r0,r0 (E for 3rd one)
ADDEQ r3,r0,r0 (T for 4th one)
```
#### APSR - Application Program Status Register ( N Z C V )
- **What are the condition code suffixes of ARM instruction? ARM 指令的條件碼後綴是什麼?**
ADDS、LDRB、BEQ、BVS
- **What is the difference between instruction ADD and ADDS? 指令ADD與ADDS之間有何差別?**
ADD是一般的加法,ADDS會更新N, Z, C and V 4個 flags
#### Question 2 (for lab 3-2):
- **How to detect overflow by software? That is, using an algorithm or logical operation to detect overflow.
如何通過軟體檢測溢位?即使用演算法或是邏輯判斷的方式偵測溢位。**
```
BVS 、 Signed bit
```
- **Question 3 (for lab 3-2): Does ARMv7-M provide any hardware support on overflow detection?
ARMv7-M 是否在溢出檢測方面提供任何硬體支持?**
```
V flag
```
### Demo Question
#### **Question (3-1)**
>請使用 asm code 回答下述問題
1. **請說明如何計算變數 X, Y 之間的漢明距離,如何統計有幾個相異的 bits?**
```
eor (xor) 然後計算有幾個1
```
2. 請說明程式是如何從 hamm 函數跳回到 main 函數中
```
bl hamm 在branch的同時將下筆指令的address存在LR暫存器,
bx lr 即可跳回來。
```
---
#### **Question (3-2)**
> 請說明實作方式或以 asm code 回答下述問題
1. 請說明程式是如何計算 Fn
```R3 = R1 + R2 ...```
2. 請說明如何判斷 N 值是否超出範圍 (100<N or N<0)
```用 cmp ```
---