16/32位微机原理、汇编语言及接口技术_钱晓捷 1——2章知识总结

第一章 微型计算机系统概述

1.各种进制之间的转换

(1)非十进制数到十进制数的转换
按相应进位计数制的权表达式展开,再按十进制求和。
(2)十进制数制转换为二进制数制
十进制 → 二进制的转换:
整数部分:除2取余;
小数部分:乘2取整。
十进制 → 十六进制的转换:
整数部分:除16取余;
小数部分:乘16取整。
以小数点为起点求得整数和小数的各个位。
(3)二进制与十六进制数之间的转换
用4位二进制数表示1位十六进制数

2.计算机中的码制

1、对于符号数,机器数常用的表示方法有原码、反码和补码三种。数X的原码记作 [X] [ X ] 原 ,反码记作 [X] [ X ] 反 ,补码记作 [X] [ X ] 补 注意:对正数,三种表示法均相同。它们的差别在于对负数的表示。

(1)原码:符号位:0表示正,1表示负; 数值位:真值的绝对值。 注意:数0的原码不唯一
(2)反码:若X>0 ,则 [X] [ X ] 反 = [X] [ X ] 原 ;若X<0, 则 [X] [ X ] 反 = 对应原码的符号位不变,数值部分按位求反;注意:数0的反码也不唯一
(3)补码:若X>0, 则 [X] [ X ] 补 = [X] [ X ] 反 = [X] [ X ] 原 ;若X<0, 则 [X] [ X ] 补 = [X] [ X ] 反 +1;计算机中有符号数都是以补码的形式出现。

注意:机器字长为8时,数0的补码唯一,同为00000000 , 2、8位二进制的表示范围: 原码:-127~+127
反码:-127~+127 补码:-128~+127

3.组成结构

1、计算机的经典结构——冯.诺依曼结构

(1)计算机由运算器、控制器、输入设备和输出设备五大部分组成(运算器和控制器又称为CPU)
(2)数据和程序以二进制代码形式不加区分地存放在存储器总,存放位置由地址指定,数制为二进制。
(3)控制器是根据存放在存储器中的指令序列来操作的,并由一个程序计数器控制指令的执行。

2、系统总线的分类

(1)数据总线(Data Bus),它决定了处理器的字长。
(2)地址总线(Address Bus),它决定系统所能直接访问的存储器空间的容量。
(3)控制总线(Control Bus)
3、中央处理器在内部结构上由运算器、控制器、寄存器阵列和内部总线等各部分构成,其主要功能是完成各种算数及逻辑运算,并实现对整个微型计算机控制,为此,其内部又必须具备传递和暂存数据的功能。
4、微处理器,用于实现微型计算机的运算和控制功能,是微型计算机的核心;一台微型计算机由微处理器、内存储器、I/O接口电路以及总线构成;微型计算机系统则包括硬件系统和软件系统两大部分,其中硬件系统又包括微型计算机和外围设备。

第二章 微处理器和指令系统

一、8086微处理器

1、概念

8086是一种单片微处理芯片,其内部数据总线的宽度是16位,外部数据总线宽度也是16位,片内包含有控制计算机所有功能的各种电路。8086地址总线的宽度为20位,有1MB(220个存储单元)个存储单元寻址空间。**8086CPU由总线接口部件BIU和执行部件EU组成。**BIU和EU的操作是异步的,为8086取指令和执行指令的并行操作体统硬件支持。

2、寄存器结构

8086微处理器包含有13个16位的寄存器和9位标志位。
4个通用寄存器(AX,BX,CX,DX)
4个段寄存器(CS,DS,SS,ES)
4个指针和变址寄存器(SP,BP,SI,DI)
指令指针(IP)
1)、通用寄存器
(1)8086含4个16位数据寄存器,它们又可分为8个8位寄存器,即: AX AH,AL BXBH,BL CXCH,CL DXDH,DL 常用来存放参与运算的操作数或运算结果
(2)数据寄存器特有的习惯用法
AX:累加器。多用于存放中间运算结果。所有I/O指令必须都通过AX与接口传送信息;
BX:基址寄存器。在间接寻址中用于存放基地址;
CX:计数寄存器。用于在循环或串操作指令中存放循环次数或重复次数;
DX:数据寄存器。在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存放I/O端口地址。
2)、指针和变址寄存器
SP:堆栈指针寄存器,其内容为栈顶的偏移地址;
BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
SI:源变址寄存器 DI:目标变址寄存器 变址寄存器常用于指令的间接寻址或变址寻址。
3)、段寄存器
CS:代码段寄存器,代码段用于存放指令代码
DS:数据段寄存器
ES:附加段寄存器,数据段和附加段用来存放操作数
SS:堆栈段寄存器,堆栈段用于存放返回地址,保存寄存器内容,传递参数
4)、指令指针
(IP) 16位指令指针寄存器,其内容为下一条要执行的指令的偏移地址。
5)标志寄存器
(1)状态标志:

  • 进位标志位(CF):运算结果的最高位有进位或有借位,则CF=1
  • 辅助进位标志位(AF):运算结果的低四位有进位或借位,则AF=1
  • 溢出标志位(OF):运算结果有溢出,则OF=1
  • 零标志位(ZF):反映指令的执行是否产生一个为零的结果
  • 符号标志位(SF):指出该指令的执行产生最高位有效位的结果
  • 奇偶标志位(PF):表示指令运算结果的低8位“1”个数是否为偶数

    (2)控制标志位

  • 中断允许标志位(IF):表示CPU是否能够响应外部可屏蔽中断请求

  • 跟踪标志(TF):CPU单步执行
  • 方向标志DF:用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

二、8086指令系统

(一)数据寻址方式

1. 立即寻址:

操作数(为一常数)直接由指令给出,(此操作数称为立即数),立即寻址只能用于源操作数
例 MOV AX, 1C8FH
MOV BYTE PTR[2A00H], 8FH
错误例: × MOV 2A00H,AX 错误!
指令操作例:MOV AX,3102H; AX3102H 执行后,(AH) = 31H,(AL) = 02H

2. 寄存器寻址

可存放在8位寄存器中(8个):ah,al,bh,bl,ch,cl,dh,dl;也可以存放在16位寄存器中(8个):ax,bx,cx,dx,si,di,bp,sp.

(1)操作数放在某个寄存器中
(2)源操作数与目的操作数字长要相同
(3)寄存器寻址与段地址无关
例: MOVAX,BX M O V A X , B X ;
MOV[3F00H],AX M O V [ 3 F 00 H ] , A X ;
MOVCL,AL M O V C L , A L
错误例: × MOVAX,BL M O V A X , B L 字长不同
× MOVES:AX,DX M O V E S : A X , D X 寄存器与段无关

3. 存储器寻址方式
  1. 直接寻址
    (1)指令中直接给出操作数的16位偏移地址 偏移地址也称为有效地址(EA, Effective Address)
    (2)默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀
    (3)偏移地址也可用符号地址来表示,如ADDR、VAR
    例: MOV AX ,[2A00H]
    MOV DX,ES:[2A00H]
    MOV SI,TABLE_PTR
  2. 间接寻址
    操作数的偏移地址(有效地址EA)放在寄存器中 只有SI、DI、BX和BP可作间址寄存器 例:
    MOV AX,[BX]
    MOV CL,CS:[DI]
    错误例 :× MOV AX, [DX]
    × MOV CL, [AX]
  3. 寄存器相对寻址
    EA=间址寄存器的内容加上一个8/16位的位移量 例: MOV AX, [BX+8]
    MOV CX, TABLE[SI] MOV AX, [BP]; 默认段寄存器为SS

     指令操作例:MOV AX,DATA[BX] 若(DS)=6000H, (BX)=1000H, DATA=2A00H,

    (63A00H)=66H, (63A01H)=55H
    则物理地址 = 60000H + 1000H + 2A00H
    =63A00H
    指令执行后:(AX)=5566H

4.基址变址寻址 若操作数的偏移地址: 由基址寄存器(BX或BP)给出 —— 基址寻址方式 由变址寄存器(SI或DI)给出 ——
变址寻址方式 由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。

EA=(BX)+(SI)或(DI); EA=(BP)+(SI)或(DI) 同一组内的寄存器不能同时出现。

注意:除了有段跨越前缀的情况外,当基址寄存器为BX时,操作数应该存放在数据段DS中,当基址寄存器为BP时,操作数应放在堆栈段SS中。例:
MOV AX, [BX] [SI]
MOV AX, [BX+SI]
MOV AX, DS: [BP] [DI]
错误例: × MOV AX, [BX] [BP]
× MOV AX,[DI][SI]

*指令操作例:MOV AX,[BX][SI] 假定:(DS)=8000H, (BX)=2000H, SI=1000H
则物理地址 = 80000H + 2000H + 1000H = 83000H
指令执行后:(AL)=[83000H] (AH)=[83001H]*
5. 相对基址变址寻址
在基址-变址寻址的基础上再加上一个相对位移量 EA=(BX)+(SI)或(DI)+8位或16位位移量;
EA=(BP)+(SI)或(DI)+8位或16位位移量

指令操作例:MOV AX,DATA[DI][BX] 若(DS)=8000H,(BX)=2000H, (DI)=1000H,DATA=200H
则指令执行后(AH)=[83021H], (AL)=[83020H]

寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:
|寻址方式 | 指令操作数形式|
|寄存器间接 | 只有一个寄存器(BX/BP/SI/DI之一)|
|寄存器相对 | 一个寄存器加上位移量|
|基址—变址 | 两个不同类别的寄存器 |
|相对基址-变址 | 两个不同类别的寄存器加上位移量|

(二)指令地址寻址方式(了解有4类,能判断)

简要判断依据(指令中间的单词):
段内直接 short,near,段内间接 word;
段间直接 far 段间间接 dword 。

(三)数据传送指令

1、通用传送指令
(1) MOV dest,src;

dest←src 传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。 具体来说可实现:
① MOV mem/reg1,mem/reg2 指令中两操作数中至少有一个为寄存器
② MOV reg,data ;立即数送寄存器
③ MOV mem,data ;立即数送存储单元
④ MOV acc,mem ;存储单元送累加器
⑤ MOV mem,acc ;累加器送存储单元
⑥ MOV segreg,mem/reg 存储单元/寄存器送段寄存器
⑦ MOV mem/reg,segreg 段寄存器送存储单元/寄存器
MOV指令的使用规则
①IP不能作目的寄存器
②不允许mem←mem
③不允许segreg←segreg
④立即数不允许作为目的操作数
⑤不允许segreg←立即数
⑥源操作数与目的操作数类型要一致
⑦当源操作数为单字节的立即数,而目的操作数为间址、变址、基址+变址的内存数时,必须用PTR说明数据类型。如:MOV [BX],12H 是错误的。

(2).堆栈指令

什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。
规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。
① 压栈指令PUSH PUSH src ; src为16位操作数
例:PUSH AX ;将AX内容压栈 执行操作:(SP)-1←高字节AH (SP)-2←低字节AL (SP)←(SP)- 2
注意进栈方向是高地址向低地址发展。`
② 弹出指令POP POP dest
例:POP BX ;将栈顶内容弹至BX 执行操作:(BL)←(SP) (BH)←(SP)+1 (SP)←(SP)+2 堆栈指令在使用时需注意的几点: ① 堆栈操作总是按字进行
② 不能从栈顶弹出一个字给CS
③ 堆栈指针为SS:SP,SP永远指向栈顶
④SP自动进行增减量(-2,+2)

(3)交换指令XCHG

格式:XCHG reg,mem/reg
功能:交换两操作数的内容。
要求:

  • 两操作数中必须有一个在寄存器中;
  • 操作数不能为段寄存器和立即数;
  • 源和目地操作数类型要一致。

举例: XCHG AX,BX
XCHG [2000],CL

2、输入输出指令

只限于用累加器AL或AX来传送信息。 功能: (累加器)←→I/O端口

(1) 输入指令IN 格式:

IN acc,PORT
PORT端口号0~255H
IN acc,DX ;
DX表示的端口范围达64K
例:IN AL,80H ;(AL)←(80H端口)
IN AL,DX ;(AL)←((DX))

(2) 输出指令OUT 格式:

OUT port,acc
OUT DX,acc
例:OUT 68H,AX ;
(69H,68H)←(AX)
OUT DX,AL ;
((DX))←(AL)

在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器 如: MOV DX,220H
IN AL,DX;
将220H端口内容读入AL

3、目标地址传送指令
(1) LEA

传送偏移地址 格式:LEA reg,mem ; 将指定内存单元的偏移地址送到指定寄存器
要求
1) 源操作数必须是一个存储器操作数;
2) 目的操作数必须是一个16位的通用寄存器。
例:LEA BX,[SI+10H] 设:(SI)=1000H 则执行该指令后,(BX)=1010H
注意以下二条指令差别:
LEA BX,BUFFER
MOV BX,BUFFER
前者表示将符号地址为BUFFER的存储单元的偏移地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中。
下面两条指令等效:
LEA BX,BUFFER
MOV BX, OFFSET BUFFER
其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。 二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。

4.算术运算指令
1、 加法指令

(1) 不带进位的加法指令ADD 格式:
ADD acc,data
ADD mem/reg,data
ADD mem/reg1,mem/reg2
实例: ADD AL,30H
ADD SI,[BX+20H]
ADD CX,SI
ADD [DI],200H
•ADD指令对6个状态标志均产生影响。
例:已知(BX)=D75FH 指令 ADD BX,8046H
执行后,状态标志各是多少? D75FH = 1110 0111 0101 1111 8046H = 1000 0000 0100 0110 1 1 11 11 0110 0111 1010 0101 结果:C=1, Z=0, P=0, A=1, O=1, S=0
判断溢出与进位 从硬件的角度:默认参与运算的操作数都是有符号数,当两数的符号位相同,而和的结果相异时有溢出,则OF=1,否则OF=0

(2) 带进位的加法ADC
ADC指令在形式上和功能上与ADD类似,只是相加时还要包括进位标志CF的内容,
例如: ADC AL,68H ; AL←(AL)+68H+(CF)
ADC AX,CX ;AX←(AX)+(CX)+(CF)
ADC BX,[DI] ;BX←(BX)+[DI+1][DI]+(CF)
(3)加1指令INC 格式:INC reg/mem
功能:类似于C语言中的++
操作:对指定的操作数加1 例: INC AL ; INC SI ; INC BYTE PTR[BX+4] ;
注:本指令不影响CF标志。

2、 减法指令

(1)不考虑借位的减法指令SUB 格式:
SUB dest, src 操作: dest←(dest)-(src)
注:1.源和目的操作数不能同时为存储器操作数
2.立即数不能作为目的操作数
指令例子: SUB AL,60H ;SUB [BX+20H],DX SUB AX,CX

(2)考虑借位的减法指令SBB
SBB指令主要用于多字节的减法。
格式: SBB dest, src 操作: dest←(dest)-(src)-(CF)
指令例子: SBB AX,CX SBB WORD PTR[SI],2080H SBB [SI],DX

(3)减1指令DEC
作用类似于C语言中的”--”操作符。 格式:DEC opr 操作:opr←(opr)-1
指令例子: DEC CL DEC BYTE PTR[DI+2] DEC SI

(4)求补指令NEG
格式: NEG opr 操作: opr← 0-(opr)
对一个操作数取补码相当于用0减去此操作数,故利用NEG指令可得到负数的绝对值。 例:若(AL)=0FCH,则执行 NEG AL后, (AL)=04H,CF=1

(5)比较指令CMP
格式: CMP dest, src 操作: (dest)-(src)
CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。 指令例子: CMP AL,0AH CMP CX,SI CMP DI,[BX+03]

5.逻辑运算和移位指令
1、逻辑运算指令

(1)逻辑与AND
对两个操作数进行按位逻辑“与”操作。 格式:AND dest, src 用途:保留操作数的某几位,清零其他位。 例1:保留AL中低4位,高4位清0。 AND AL,0FH
(2)逻辑或OR
对两个操作数进行按位逻辑”或”操作。 格式:OR dest, src
用途:对操作数的某几位置1;对两操作数进行组合。 例1:把AL中的非压缩BCD码变成相应十进制数的ASCII码。 OR AL, 30H
(3)逻辑非NOT
对操作数进行按位逻辑”非”操作。
格式:NOT mem/reg
例:NOT CX NOT BYTE PTR[DI]
(4)逻辑异或XOR
对两个操作数按位进行”异或”操作。
格式:XOR dest, src 用途:对reg清零(自身异或) 把reg/mem的某几位变反(与’1’异或)
例1:把AX寄存器清零。
①MOV AX,0
②XOR AX,AX
③AND AX,0
④SUB AX,AX
(5)测试指令TEST
操作与AND指令类似,但不将”与”的结果送回,只影响标志位。 TEST指令常用于位测试,与条件转移指令一起用。
例:测试AL的内容是否为负数。
TEST AL,80H ;检查AL中D7=1?
JNZ MINUS ;是1(负数),转MINUS … … ;否则为正数

2、移位指令

(1)非循环移位指令
算术左移指令 SAL(Shift Arithmetic Left)
算术右移指令 SAR(Shift Arithmetic Right)
逻辑左移指令 SHL(Shift Left)
逻辑右移指令 SHR(Shift Right)
这4条指令的格式相同,以SAL为例:
SAL mem/reg CL ;移位位数大于1时
SAL mem/reg 1 ;移位位数等于1时

  • 算术移位——把操作数看做有符号数;
  • 逻辑移位——把操作数看做无符号数。

移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中。
例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位

  • 影响C,P,S,Z,O标志。
  • 结果未溢出时:左移1位≡操作数*2 ;右移1位≡操作数/2

例:把AL中的数x乘10 因为 10=8+2=23+21 10 = 8 + 2 = 2 3 + 2 1 ,所以可用移位实现乘10操作。 程序如下:
MOV CL,3 SAL AL,1 ; 2x
MOV AH,AL
SAL AL,1 ; 4x
SAL AL,1 ; 8x
ADD AL,AH ; 8x+2x = 10x

6.控制转移指令
1、 转移指令

(1)无条件转移指令JMP
格式:JMP label 本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。
(2)条件转移指令(补充内容)
① 根据单个标志位设置的条件转移指令

  • JB/JC ;低于,或CF=1,则转移
  • JNB/JNC/JAE ;高于或等于,或CF=0,则转移
  • JP/JPE ;奇偶标志PF=1(偶),则转移
  • JNP/JPO ;奇偶标志PF=0(奇),则转移
  • JZ/JE ;结果为零(ZF=1),则转移
  • JNZ/JNE ;结果不为零(ZF=0),则转移
  • JS ;SF=1,则转移
  • JNS ;SF=0,则转移
  • JO ;OF=1,则转移
  • JNO ;OF=0,则转移

②根据组合条件设置的条件转移指令
这类指令主要用来判断两个数的大小。
判断无符号数的大小
JA 高于则转移 条件为: CF=0ZF=0 C F = 0 且 Z F = 0 ,即 AB A > B
JNA/JBE 低于或等于则转移 条件为: CF=1ZF=1 C F = 1 或 Z F = 1 ,即 A<=B A <= B
JB A<B A < B 则转移
JNB A>=B A >= B 则转移
判断有符号数的大小
JG ;大于则转移(A>B) 条件 (SF⊕OF=0)∧ZF=0
JGE;大于或等于则转移(A≣B) 条件为: (SF⊕OF=0)∨ZF=1
JLE;小于或等于则转移(A≢B) 条件为: (SF⊕OF=1)∨ZF=1
JL;小于则转移(A<B= 条件为: (SF⊕OF=1)∧ZF=0

2、循环控制指令

用在循环程序中以确定是否要继续循环。

  • 循环次数通常置于CX中。

  • 转移的目标应在距离本指令-128~+127的范围之内。

  • 循环控制指令不影响标志位。

(1)LOOP 格式:LOOP label 操作:(CX)-1→CX;
若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
LOOP指令与下面的指令段等价: DEC CX; JNZ label

3、过程调用指令

(1)调用指令CALL 一般格式:CALL sub ;sub为子程序的入口

4、中断指令

(1)INT n 执行类型n的中断服务程序,N=0~255

7.处理器控制指令
1、标志位操作

(1)CF设置指令 CLC 0→CF STC 1→CF CMC CF变反
(2)DF设置指令 CLD 0→DF (串操作的指针移动方向从低到高) STD 1→DF (串操作的指针移动方向从高到低)
(3)IF设置指令 CLI 0→IF (禁止INTR中断) STI 1→IF (开放INTR中断)

2、 HLT(halt) 执行HLT指令后,CPU进入暂停状态。

参考地址:https://wenku.baidu.com/view/6a4e8b0403d8ce2f006623cb.html

  • 6
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值