微机原理--计组

由于是看到哪写到哪,所以可能有点杂,可按需取用。完成的也是一小部分,后续加更~

wiki

立即数不可进行逻辑操作,因为是数不是容器,操作后无位置存放结果

外设访问:查询式访问,先取一位(代表是否busy),一直读到不忙则操作

与:置0 非:置1

存储单元

bit:最小单位,存储01

byte:1 字节 =8 bit,为存储单元

1 word(字)= 2 Byte

.c如何变为可执行文件

通过Compilation System(gcc)

  1. 预处理(Pre-procession cpp):将开头#文件中内容插入到源程序,得到新的c程序.i文件

  2. 编译(Compiler ccl):词法,语法,语义分析,中间代码生成和优化,得到.s

  3. 汇编(Assembler as):翻译为机器指令,按照固定规则打包,得到可重定位目标文件.o

  4. 链接(Linker ld):将.o文件与其他如printf.o文件通过链接器进行合并,得到可执行目标文件

CPU

PC(program count, arm):一个字的存储空间,存放某一指令的地址(执行pc指向的指令,更新pc指向下一条指令(不一定相邻))

Register file:由一些单字长的寄存器构成

ALU(Arithmatic/Logic Unit): 从RF中取数据,计算后放回覆盖原数据

主存(Main memory):内存,存放程序指令和数据

实现了运算功能和控制功能:运算器、控制器IP(Instruction Pointer, x86)、寄存器(暂存数据和执行状态(FR,Flag Register))

cpu对于存储器读写

地址总线:决定cpu寻址能力

控制总线:决定cpu对其他器件的控制能力

数据总线:数据一次传送量

存储器分类

按读写属性

RAM:随机存储器,可读可写,但必须带电存储,关机后内容丢失

ROM:只读存储器,只能读, 关机后内容不丢失

线宽

1byte(字节)=8bit(比特,位)

内存地址:8086/8088都有20 bit地址线,寻址1M空间

外设地址:16 bit, 大于16 bit的外设,需要存入dx缓冲

外部数据总线宽度:8086:16 bit,8088:8 bit

指令队列:8086:6 byte, 8088:4 byte

16位机(8086):= 16位结构 = 字长为16位 特征:①运算器一次最多处理16位 ②寄存器最大宽度为16位 ③寄存器与运算器间通路位16位

指令

jmp

修改 CS IP 内容(不能通过mov修改)

例: jmp 段地址:偏移地址(同时修改csip)

jmp 某一合法寄存器(用寄存器中的值修改IP)

cmp

无符号数,比较of sf

有符号数,比较cf sf

lea

load effective address

可将内存地址直接赋值给目标操作数

lea eax,[ebx+8]就是将ebx+8这个值直接赋给eax

mov eax,[ebx+8]是把内存地址为ebx+8处的数据赋给eax。

mov

两个操作数不可都是寄存器

段寄存器

NOT NEG对比

neg改变标志位,not不改变标志位

neg得补码,not得反码

原码:最高位0表示正、1表示负,其余位代表数值

反码:正数反码是他本身,负数反码是原码符号位不变,其余位取反

补码:正数补码是本身,负数补码是反码+1(补码无正0负0之分,可以多一个-128(1000 0000)计算机储存和运算都用补码)

and or

按位运算

大小写字母的ASCII码相差 20H,所以可以不判断大小写,通过第5位置0/1操作大小写转换

LOOP

①(cx)-- ②若cx不为0则跳转至标号处执行命令

寄存器

8086 寄存器为16位

物理地址

线性空间的内存单元中唯一的地址

同一物理地址可由不同的段地址和偏移地址组合而成

8086 有20位地址线, 但是16位结构 所以用两个16位地址(段地址+偏移地址)合成一个20位物理地址

具体实现

段地址+偏移地址送入地址加法器,合成20位物理地址,再通过内部总线送入输入输出控制电路,再通过地址总线送入存储器

地址加法器

物理地址 = 段地址*16(10H) + 偏移地址

通用寄存器

分为 相对独立的 高八位 AH 和 低八位 AL,对于低位运算不会将进位存储在高位中

值传递运算时,需注意两个操作对象的位数应当一致

AX:accumulater 累加寄存器,用于运算

BX:base 基址寄存器,用于地址索引

CX:count 计数寄存器,用于计数(循环)

DX:data 数据寄存器,用于数据传递

段寄存器

CS:Code Segment 代码段寄存器

DS:Data Segment 数据段寄存器

SS: Stack Segment 堆栈段寄存器

ES:Extra Segment 附加段寄存器

8086不支持将数据直接送入段寄存器,需要在一般寄存器中进行中转

CS和IP

二者指示了当前要读取指令的地址,即 CS:IP

CS(Code Segment):代码段寄存器

IP(Instruction Pointer):指令指针寄存器

执行过程:①从cs:ip 指向的内存单元读取入指令缓冲器 ② ip += 指令长度(指向下一条指令)③ 执行指令,跳转至 步骤① 继续

SS和SP + BP

SP(Stack Pointer):SS指向最大栈底位置(低地址),SS:SP指向当前栈顶元素(高地址),

控制pop和push访问的内存单元地址:push时,线改变sp,后传送;pop时,先读数据,后变sp

BP(Base Pointer):基址指针寄存器,用作SS的一个相对基址

STACK

栈底为高地址,入栈时栈顶向低地址方向增长

用以暂存数据,保护现场

SI和DI

功能与BX相近,但不能分成两个8位寄存器用

SI(Source Index):源变址寄存器

DI(Destination Index):目的变址寄存器

字的存储

高位字节在高地址单元, 低位字节存在低地址单元

DS和[address]

[···]表示一个内存单元,为偏移地址

数据类型

dw

define word: 单字,占16个字节

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值