微机原理笔记

  1. 二进制B 八进制O 十进制D 十六进制 H
  2. 8086CPU分为执行部件EU总线接口部件BIU

  标志寄存器(状态处理字)PSW

AX累加器   BX基址寄存器   CX计数寄存器   DX数据寄存器

指针寄存器(IP):堆栈指针寄存器SP 基数指针寄存器BP(存放基地址)

堆栈段寄存器SS

变址寄存器:源变址寄存器SI   目的变址寄存器DI

PSW是16位的寄存器,只用了9位:

状态标志6个:

OF溢出标志位,SF符号标志位,ZF零标志位,AF半进位标志位

PF奇偶标志位,CF进/借位标志位

控制标志3个:

DF:方向标志位

IF:中断标志位

TF:单步标志位(陷阱标志位)

3.指针寄存器IP   代码段寄存器CS   数据段寄存器DS  附加段寄存器ES

4.指令周期是cpu取出指令并执行这条指令的总时间。

总线周期是cpu通过总线与内存或I/O端口之间,进行一个字节的数据交换所用的时间。

时钟周期:基本定时脉冲的两个沿之间的时间间隔,是微机系统工作的最小时间单元。其值等于系统时钟频率的倒数,时钟周期又称为T状态

一个指令周期由几个机器周期组成,一个总线周期一般由四个时钟组成

一个基本的读写周期包含4个是时钟状态T1-T4

若存储器或I/O端口来不及接受数据,就在T3和T4之间插入等待时钟TW

CPU在每个总线周期的T3状态开始对READY信号采样,如果检测到该信号为低电平(未准备好),就插入一个等待周期Tw,在Tw状态中继续对该信号采样,如仍为低电平,则继续插入Tw,Tw状态可以插入多个,直到REDAY信号为高电平时, 才进入T4状态

  1. 内存中的唯一地址是物理地址

物理地址=基/段地址(绝对地址)*16+偏移地址(相对/有效地址)

  1. 操作数存放地址:
  1. 指令中,此时操作时就是立即操作数
  2. CPU的内部寄存器中
  3. 内存的数据区中
  1. 立即数寻址(操作数在指令中给出

立即数寻址只能用于源操作数,不能用于目的操作数,且两个操作数的长度要相等。

立即数是8位时,存放在低地址单元,16位时,高到高,低到低

MOV  AL,10H

8.寄存器寻址

操作数放在CPU内部的寄存器中,可以是8位或16位寄存器,注意源操作数和目的操作数的位数应一致。可以同时在源操作数和目的操作数使用

MOV   AX,BX

9.直接寻址

操作数存放在内存中,在指令中直接给出存放操作数的偏移地址(有效地址EA),如果不加说明,默认的段基址是数据DS(3000H)

传送内存中其他段的数据,在相应的偏移地址前加段超越符“ :”

MOV  AX,    SS:[0020H]   

将堆栈段偏移地址为0020H的地址中的内容传送到AX中去

10.寄存器间接寻址

操作数存放在内存中,但其偏移地址存放寄存器中。在指令中只给出这个寄存器。

作为间址的寄存器只能有4个:SI,DI, BP,BX   操作数有效地址EA=【寄存器】

用BP寻址,段基址默认为堆栈段SS,其余3个的段基址默认为数据段DS,同时指令允许段超越

物理地址=16*DS(SS)+SI/DI/BX(BP)

MOV  AX,[SI]

11.寄存器相对寻址(变址寻址)

作为变址的寄存器只能有4个:BX, SI,  DI, BP

偏移地址EA=寄存器内容+指令中给定的偏移量(DISP)

12.基址变址寻址

EA=基址寄存器内容+变址寄存器内容

EA=(BX)/(BP)+(SI)/(DI)

BX SI DI,默认的段基址为DS;BP,默认的段基址为SS

允许段超越前缀,变址寄存器和基址寄存器要同时存在

13.相对基址变址寻址

EA=基址寄存器内容+变址寄存器内容+偏移量

EA=(BX)/(BP)+(SI)/(DI)+DISP8/16

总结:寄存器寻址和立即寻址不需要物理地址,除了立即寻址之外,源操作数都在寄存器中

14.通用数据传送指令

MOV指令:将操作数从源地址送入目的地址

CS,IP不能作为目的操作数

立即数不能直接传送给段寄存器    立即数不能作为目的操作数

内存单元间不能直接传送      MOV  [SI], [2000H]

两个段寄存器间不能直接传送

堆栈操作指令:

SS是段基址,表示堆栈开始的地方

SP的栈指针,时钟指向栈顶

进栈指令:              PUSH  SRC

执行操作:              SP<--SP - 2

                        (SP+1, SP )<--SRC

出栈指令:              POP  DST

执行操作:              DST<--(SP+1, SP)

                        SP<--SP+ 2

堆栈操作必须以字为单位。(立即数不能做操作数)

CS不能作为出栈对象

XCHG交换指令将源操作数和目的操作数内容进行交换,字和字节都可以

XCHG   OPRD1,  OPRD2

OPRD1 <-->OPRD2

字和字节不能交换

立即数和段寄存器不能作为操作数,CS和IP不能交换

15.累加器专用传送指令(只与AX,AL有关)

输入指令:

长:IN AL,PORT(字节)

IN AX,PORT(字)

短:IN AL,DX(字节)

IN AX,DX(字)

输出指令:

长:OUT PORT,AL(字节)

OUT PORT,AX(字)

短:OUT DX,AL(字节)

OUT DX,AX(字)

当外口地址大于8位(0FFH即255)时,用DX作间址

XLAT查表指令:

XLAT OPR

AL <---[BX + AL]

地址传送指令:

LEA有效地址送寄存器

LEA  REG, SRC

执行操作: REG<---SRC的EA

LEA  SI,  [2728H] ; SI<---2728H

等价于MOV SI,2728H

REG不能是段寄存器

LDS指针送寄存器和DS

LDS REG, SRC

执行操作:REG<---(SRC)    DS<---(SRC+2)

将源操作数中的低字送入16位寄存器,高字送入DS

LES指针送寄存器和ES

LDS REG, SRC

执行操作:REG<---(SRC)    ES<---(SRC+2)

将源操作数中的低字送入16位寄存器,高字送入ES

标志寄存器传送指令:

LAHF指令:标志寄存器PSW中的低8位--->AH中

SHAF指令:AH--->标志寄存器PSW中的低8位

PUSHF指令:

执行操作: SP<---SP - 2

           (SP+1, SP ) <---PSW

POPF指令:

执行操作: PSW <---(SP+1, SP)

         SP<---SP+ 2

符号扩展指令:

CBW 将字节扩展成字的指令

执行操作:若AL的最高有效位为0,则AH= 00H

        若AL的最高有效位为1,则AH= 0FFH

CWD将字扩展成双字的指令

执行操作:若AX的最高有效位为0,则DX=0000H

        若AX的最高有效位为1,则DX= 0FFFFH

  1. 算数运算指令

(1)加法指令

ADD加法指令

ADD  DST,SRC

(DST)<----(DST)+(SRC)

两个操作数不可以都是内存单元

ADC带进位加法指令

ADC   OPRD1,  OPRD2

OPRD1< ---OPRD1 + OPRD2+CFà

INC加1指令

INC    OPRD

OPRD+1--->OPRD

加法指令影响状态标志位,但INC不影响CF。

(2)减法指令

SUB减法指令

SUB   OPRD1,  OPRD2

OPRD1 - OPRD2--->OPRD1

SBB带借位减法

SBB   OPRD1,  OPRD2

OPRD1- OPRD2-CF--->OPRD1

DEC减1指令

DEC    OPRD

OPRD-1--->OPRD

不影响借位标志

NEG求补指令

NEG    OPRD

- OPRD--->OPRD

只有当操作数为0时,CF为0, 否则CF总为1

CMP比较指令

CMP  OPRD1,  OPRD2;  

OPRD1---OPRD2à结果不保存

ZF为1,则两者相等,为0不等

(3)乘法指令

MUL无符号乘法指令

MUL  SRC

执行操作:字节操作数  AX< --- AL * SRC

          字操作数   (DX, AX) < --- AX * SRC

SRC不能为立即数

IMUL有符号乘法指令

IMUL  SRC

执行操作于MUL相似,必须是带符号数

乘法指令中,目的操作数必须是累加器,字节为AL,字为AX。运算结果只影响CF,OF.

(4)除法指令

DIV无符号除法

DIV  SRC

执行操作:

字节操作: AX/SRC--->AL  商

         AX/SRC--->AH  余数

字操作:(DX,AX)/SRC--->AX  商

       (DX,AX)/SRC--->DX  余数

IDIV有符号除法

IDIV  SRC

执行操作同上

除法运算指令中,除数是被除数一半的字长

17.逻辑运算指令

AND逻辑与,OR逻辑或,XOR异或均为双操作数指令,长度必须相等,同为字或字节

这三条指令执行后,CF=0, OF=0, SF,  PF,  ZF发生变化。

NOT逻辑非(按位取反)

指令格式:NOT   OPRD

TEST测试指令

TEST   OPRD1,  OPRD2

按位与操作,不保留结果,只影响标志位

18.移位指令

SAL:算术左移   SAL   OPR,CNT

SHL:逻辑左移  SHL   OPR,CNT

左移一位进CF,右边补0,相当于乘2。

若移位后最高位与CF不同,则OF=1,表示移位前后数据变号

若移位位数大于1,所移的位数用CL存放

SAR: 算术右移

最低位进CF, 左边重复最高位, 即操作数符号不变。

SHR: 逻辑右移

最低位进CF, 左边补0

ROL: 不带进位循环左移

MOV   AL, -126     AL: 1000  0010

ROL  AL,  1        AL: 0000  0101

移位后最高位与CF不同,则OF=1,表示移位前后数据变号。

ROR: 不带进位循环右移

MOV   AL, -126    AL: 1000  0010

ROR  AL,  1       AL: 0100  0001

RCL: 带进位循环左移

STC               CF=1

MOV   AL, -126    AL: 1000  0010

RCL  AL,  1       AL: 0000  0101

RCR: 带进位循环右移

STC               CF=1

MOV   AL, -126    AL:1000  0010

RCR  AL,  1       AL: 1100  0001

19.串操作指令

MOVS串传送指令

MOVSB 字节传送

执行操作:  (1)  DF=0,传送 (ES:  DI) ← (DS:  SI)

 (2) 修改指针 SI←SI±1, DI←DI±1

MOVSW 字传送

执行操作:  (1)  DF=1,传送 (ES:  DI) ← (DS:  SI)

 (2) 修改指针 SI←SI±2, DI←DI±2

DF=1时,减量,DF=0,增量

CMPS串比较指令

CMPSB,字节操作:((SI))—((DI))

SI,DI自增1

CMPSW,字操作:((SI))—((DI))

SI,DI自增2

DF=1时,减量,DF=0,增量

SCAS串搜索指令

SCASB:(AL)-((DI)),DI自增1

SACSW:(AL)-((DI)),DI自增2

DF=1时,减量,DF=0,增量

LODS串取指令

LODSB:(AL)<---((DI)),DI自增1

LODSW:(AL)<---((DI)),DI自增2

DF=1时,减量,DF=0,增量

STOS串存指令

STOSB:(DI)<---((AL)),DI自增1

STOSW:(DI)<---((AX)),DI自增2

DF=1时,减量,DF=0,增量

REP重复指令

(CX)=0,退出重复,(CX)!=0,(CX)<--(CX)-1,执行其后串操作指令

REPE/REPZ相等/为0重复指令

执行操作:如CX=0或ZF=0则退出,否则执行CX←CX-1

REPNE/REPNZ不相等/不为0重复指令

执行操作:如CX=0或ZF=1则退出,否则执行CX←CX-1

20.处理器控制指令(PSW)

置位(SET):赋值1;  清位(CLEAR): 赋值0

取补(COMPLEMENT):  对当前值取反  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值