(基于ARM的)微机原理与接口技术笔记(3)
咕了几天,不好意思.先说个题外话,专栏不能插入markdown有亿些难受.树莓派pico可以整活,国庆节考虑整个好活.
下面言归正传.先从一些计算机的存储系统说起.

这样的问题需要使用位运算去解决.假设输入A/D的数据存到变量a里面了,先检查符号位,然后去取原码,最后输出.
注意字符串求长
strlen
求的东西是什么.如果是宽字符wchar_t
型的,求长wcslen
一组固定大小的
bit
称为字(WORD
)在《微机》中先默认一个字
WORD
字长32位但是
Windows.h
中有下面的定义typedef unsigned short WORD;
Big-Endian 高字节放低地址,低字节放高地址
Little-Endian 低字节放低地址,高字节放高地址
查看内存:
首地址是
0x20002000
地址从上到下增长.一个地址里面是一个byte如果在
0x20002008
先看地址,再看地址增长方向,然后看一个格子多大.
拿下面的内存片段举例:


ARM概述
1.ARM及其应用
处理器架构包括指令集,寄存器,处理器时序.
ARM (Advanced RISC Machines)公司成立于1990.11 ARM不生产处理器只生产
IP
,授权给生产商.900片ARM/秒 700万片ARM/天
2.处理器体系
《微机》用的ARM7/ARM7TDMI STR710F
STM32: ARM Cortex M3/M4
树莓派4B: ARM Cortex A72
A系列追求高性能可以运行操作系统(android,linux等),R系列追求实时和性能,M系列低功耗用于单片机
智能手机有>=10片ARM


同样是32位单片机,ST R710F的核是个比较老的ARM7TDMI. STM32和树莓派pico是相对比较新的Cortex-M核.树莓派4B则是4个64位Cortex-A72核.
3.ARM的工作状态
32位架构
byte(字节) 8bit
halfword(半字) 16bit
word(字) 32bit
ARM状态 32位ARM指令集 处理32位
Thumb状态 16位Thumb指令集(是ARM指令集的子集)
ARM状态和Thumb状态可以互相切换 区别是指令长度不一样
7个基本工作模式
User:非特权模式(其它的称为特权模式)
FIQ:快中断模式
IRQ:中断模式
Supervisior:管理模式 操作系统调用 复位/软中断 上电复位
Abort:存取异常
Undef:未定义指令异常
System:系统模式
4.ARM的寄存器
31个通用寄存器 6个状态寄存器
实际用的是16+2
r0到r7是共用的
r8-r12除了快中断以外通用,快中断有专用的r8-r12目的是加速快速响应
r13,r14有6组
r13 栈指针(stack pointer)表示当前执行
r14 链接寄存器 保存返回的地址
r15 程序计数器 正在"取指"的指令 要考虑三级流水线的问题
cpsr 当前程序状态寄存器
spsr 程序状态保存寄存器(异常状态时用于恢复)

31位到28位 条件位
7位中断禁止位
6位快中断禁止位
程序计数器(pc)
16位指令 按半字对齐
pc值bit[31:1]决定
bit[0]未定义
32位指令 按字对齐
pc值bit[31:2]决定
bit[1:0]未定义
ARM状态
Thumb状态
异常处理
改变arm状态
改变异常模式
屏蔽中断
copy cpsr到spsr
设置cpsr相应位
存储返回地址
修改pc指向终端入口
异常后返回
从spsr恢复cpsr