EBU5476 Microprocessor System Design北邮微处理器tutorial for week one

R0-R12 

The LR is used to store the return address of a subroutine or a function call

• The program counter (PC) will load the value from LR after a function is finished

xPSR: combined Program Status Register

• Provides information about program execution and ALU flags

• Application PSR (APSR)

• Interrupt PSR (IPSR)

• Execution PSR (EPSR)

16的8次方=2的32次方=2的三十次方*4

注意这里1GB=2**30 和常规不同

  1. 在 Cortex - M4 中,1MB 的 SRAM 位带区存在位带特性。对于位带区,每一个 32 字节的内存块(称为位带别名区)对应位带区中的 1 字节。总共1MB∗32 位

Aalias​=0x22000000+((Abit−band​−0x20000000)×32)+(bit number×4)

取最小的两个

取最小的四个

signed符号拓展,取最小的两个,用F替换前面的所有0

操作名要背

第一次先将0x87654321存入r0,shift r0到0x20000004

第二次直接先将r0 shift到0x20000008,r1写入新的r0,写完后将r0 shift到r0+4 0x200000C

最后一次正常往后写

所以选A

Lowest register对应Lowest memory,

push with the lowest, pop with the lowest

括号里的顺序不重要

但注意下题单独记忆

多次push,后续的memory address 会越来越小,反过来后续的pop在register中越来越大

1. ADDS r3, r0, r1, LSL #4

  • 指令含义:将 r1 逻辑左移 4 位(r1 变为 0x00000010 ),然后与 r0 相加,结果存到 r3 ,同时更新标志位。

  • 计算过程0xFFFFFFFE + 0x00000010 = 0x0000000E 。

    • N(Negative):结果为正,所以 N = 0 。

    • Z(Zero):结果不为 0,所以 Z = 0 。

    • C(Carry):加法过程有进位(从全 F 加出了非全 F 的结果),所以 C = 1 。

    • V(Overflow):没有发生溢出(运算前后符号未改变 ),所以 V = 0 。

2. SUBS r3, r0, r0

  • 指令含义r0 - r0 ,结果存到 r3 并更新标志位。

  • 计算过程0xFFFFFFFE - 0xFFFFFFFE = 0x00000000 。

    • N(Negative):结果为正,所以 N = 0 。这个只看首位是否是1

    • Z(Zero):结果为 0,所以 Z = 1 。

    • C(Carry):减法可看作加法逆运算,相当于加上补码,这里操作数相同,有借位(相当于进位 ),所以 C = 1 。

    • 对于 SUBS r3, r0, r0 (r0 = 0xFFFFFFFE )的分析

    • 计算 r0 - r0 ,即 0xFFFFFFFE - 0xFFFFFFFE ,转换为加法就是 0xFFFFFFFE + (- 0xFFFFFFFE) 。
    • - 0xFFFFFFFE 的补码计算:0xFFFFFFFE 按位取反得到 0x00000001 ,再加 1 得到 0x00000002 。
    • 那么 0xFFFFFFFE + 0x00000002 ,在 32 位二进制加法运算中,从右往左逐位相加,会产生进位(最右边的位相加就会进位 ),一直到最高位,最终结果是 0x00000000 。
    • 这里产生的进位,在减法中就相当于借位 。在 ARM 指令集中,对于减法操作,当有借位时(等同于这种加法形式下的进位 ),进位标志 C 就会被置为 1 。所以在 SUBS r3, r0, r0 这个操作中,C = 1 。
    • V(Overflow):没有溢出(运算前后符号未改变 ),所以 V = 0 。

    • (例如两个很大的负数相加突然变成正数才算overflow)

3. ADDS r3, r0, r2

  • 指令含义r0 + r2 ,结果存到 r3 并更新标志位。

  • 计算过程0xFFFFFFFE + 0xFFFFFFFD = 0xFFFFFFFB 。

    • N(Negative):结果为负,所以 N = 1 。

    • Z(Zero):结果不为 0,所以 Z = 0 。

    • C(Carry):加法有进位(从全 F 加出了非全 F 的结果 ),所以 C = 1 。

    • V(Overflow):没有溢出(运算前后符号未改变 ),所以 V = 0 。

4. LSRS r3, r0, #1

  • 指令含义:将 r0 逻辑右移 1 位,结果存到 r3 并更新标志位。

  • 计算过程0xFFFFFFFE 逻辑右移 1 位是 0x7FFFFFFF 。

    • N(Negative):结果为正,所以 N = 0 。

    • Z(Zero):结果不为 0,所以 Z = 0 。

    • C(Carry)逻辑右移,移出的最低位为 0,所以 C = 0 

    • V(Overflow):逻辑右移不产生溢出,所以 V = 0 。。

5. ASRS r3, r1, #1

  • 指令含义:将 r1 算术右移 1 位,结果存到 r3 并更新标志位。

  • 计算过程r1 = 0x00000001 ,算术右移 1 位后为 0x00000000 。

    • N(Negative):结果为正,所以 N = 0 。

    • Z(Zero):结果为 0,所以 Z = 1 。

    • C(Carry)算术右移,移出的最低位为 1,所以 C = 1 。

    • V(Overflow):算术右移不产生溢出,所以 V = 0 。

6. ANDS r3, r0, r2

  • 指令含义r0 与 r2 按位与,结果存到 r3 并更新标志位。

  • 计算过程0xFFFFFFFE & 0xFFFFFFFD = 0xFFFFFFFC 。

    • N(Negative):结果为负,所以 N = 1 。

    • Z(Zero):结果不为 0,所以 Z = 0 。

    • C(Carry):按位与操作不影响进位标志,这里保持初始值(初始为 0 ),但题目中用 x 表示未定义,对于按位与操作确实不明确进位的定义情况,所以这里标志位情况合理。

    • V(Overflow):按位与操作不产生溢出,这里标志位用 x 表示未定义也合理。

看书,略

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值