链接

十四个寄存器
寄存器和物理地址的形成
课后习题答案

一、基础知识

BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。

  • 组合型BCD码用高四位和低四位分别对应十进制数的个位和十位,其表示范围是0~99;

  • 非组合型BCD码用一个字节的低四位表示十进制数,高四位则任意取值,表示范围为0~9。

  • 组合型:254=(001001010100)BCD
    非组合型:254=(00000010 00000101 00000100)BCD

  • Q表示八进制数。 八进制,Octal,缩写OCT或O

  • 在计算机系统中,数值一律用补码来表示和存储

  • 在补码运算过程中,符号位参加运算,简化了加减法规则,且能使减法运算转化为加法运算,可以简化机器的运算器电路。

What are the main performance indexes of Microcomputer?
Answer: CPU word length, memory capacity, operation speed, CPU core and IO working voltage, manufacturing process, expansion capacity and software configuration.

  • 物理地址是访问存储器的实际地址,一个存储单元对应唯一的一个物理地址。逻辑地址是对应逻辑段内的一种地址表示形式,它由段基址和段内偏移地址两部分组成,通常表示为
    段基址:偏移地址。
    物理地址=段基址*10H+偏移地址。

  • 1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。(一个内存单元=1Byte)

  • 数据总线是用来传送数据的,每根数据线传送一个二进制位,8根正好传送一个字节。

  • 地址总线是传送地址的,每根传送一个二进制位,8根地址线传送8个二进制位。这8个二进制位有28种不同的变化,所以可以用来传送28个不同存储单元的地址,也就是说用8根地址线可以寻址256B.

  • 在8086系统中,16个字就是32个字节,写成十六进制数就是20H,起始地址为808A0H:DDF6H的物理地址为:8E7F6H,所以数据区末字单元的物理地址为:8E7F6H+(20H-2)=8E7F6H+(10H-1)*2=8E814H

物理地址的形成
8086CPU的工作过程:
1 从CS:IP指向的内存单元读取指令进入指令缓冲器
2 IP=IP+指令长度
3 执行指令

IP=IP+所读指令的字节数。

一、没有操作数的指令,指令长度为1个字节

二、操作数只涉及寄存器的的指令,指令长度为2个字节

如:mov bx,ax

三、操作数涉及内存地址的指令,指令长度为3个字节

如:mov ax,ds:[bx+si+idata]

四、操作数涉及立即数的指令,指令长度为:寄存器类型+1

8位寄存器,寄存器类型=1,如:mov al,8;指令长度为2个字节16位寄存器,寄存器类型=2,如:mov ax,8;指令长度为3个字节

五、跳转指令,分为2种情况:

1、段内跳转(指令长度为2个字节或3个字节)

jmp指令本身占1个字节

段内短转移,8位位移量占一个字节,加上jmp指令一个字节,整条指令占2个字节

如:jmp short opr

段内近转移,16位位移量占两个字节,加上jmp指令一个字节,整条指令占3个字节

如:jmp near ptr opr

2、段间跳转,指令长度为5个字节

如:jmp dword ptr table[bx][di]

或 jmp far ptr opr

或 jmp dword ptr opr

注意:形如“jmp
1234:5678”的汇编指令,是在Debug中使用的汇编指令,汇编编译器并不认识,如果在源程序中使用,那么在编译时便会报错。

二、寄存器

1、通用寄存器(8)

(1)数据寄存器 AX:累加器 (accumulator)

  • 所有I/O指令都通过AX与接口传送信息,中间运算结果也多放AX中;

BX:基址寄存器(base)

  • 在间接寻址中用于存放基地址;

CX:计数寄存器 (count)

  • 用于在循环或串操作指令中存放计数值;

DX:数据寄存器 (data)

  • 在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。

(2)地址指针寄存器

SP:堆栈指针寄存器 (Stack Pointer)其内容为栈顶的偏移地址;
BP:基址指针寄存器 (Base Pointer),常用于在访问内存时存放内存单元的偏移地址。

共同点: 1)默认指向堆栈区 2)多数情况用于存放地址

(3) 变址寄存器
SI:源变址寄存器
DI:目标变址寄存器 变址寄存器在指令中常用于存放数据在内存中的地址。

2、控制寄存器(2)

标志寄存器
OF overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1.
SF sign Flag 符号标志 记录运算结果的符号,结果负时为1.
ZF zero flag 零标志 运算结果等于0时为1,否则为0.
CF carry flag 进位标志 最高有效位产生进位时为1,否则为0.
AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.
PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0.
DF direcion flag 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.
IF interrupt flag 中断标志 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.
TF trap flag 陷阱标志 用于调试单步操作.

3、段寄存器(4)

用于存放相应逻辑段的段基地址 8088有4个16位段寄存器

CS(代码段) (Code Segment) 指明代码段的起始地址
SS(堆栈段) (Data Segment) 指明堆栈段的起始地址
DS(数据段)(Stack Segment) 指明数据段的起始地址
ES(附加段) (Extra Segment)指明附加段的起始地址

  • 存放相应段的段基址的高16位。每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途。
    - 它们要和BX、BP、SI、DI、IP配合形成存储单元的物理地址。

试卷复习

  • 填空(20分)
    物理地址存多个数,下一单元是?
    2.CPU分结构,好处
    3.CPU的性能指标
    4.关于接口与CPU的连接,与外设的连接
    5.关于8259A的怎么管理中断,怎么初始化
    8259A的初始化编程,需要CPU向它输出一个2—4字节的初始化命令字,输出初始化命令字的流程如图所示,其中ICW1和ICW2是必须的,而ICW3和ICW4需根据具体的情况来加以选择。
    6.关于一个伪指令的操作
    7.给你一段程序,让你计算程序结果,这个程序里面涉及的指令,有DW,MOV,OFFSET,查表指令
    8.8253怎么计数的
    9.还是关于8259A的
    10.是一个程序题,填3个空,实现一个功能,这个程序里面涉及3个指令,移位指令(左移SHL),MOV指令,ADD指令

  • 选择(20分)
    1.关于4个选项是否正确
    2.关于8253初始化
    3.给两个指令,问下面这个选项当中哪一个有语法错误
    4.关于输入输出指令
    5.关于输入输出方式
    6.CPU与其他的芯片交换信息时一些基本知识
    7.CPU与其他的芯片或者外设连接时一些通讯信息(查询方式 中断方式)
    8.关于输入输出方式
    9.关于高速缓存(cache)
    10.关于CPU和8259A进行交换

  • 第四大题(第三章的内容,跟指令有关)
    12分 表里有6条指令,执行之后的结果
    8分 编一段小程序,只要第三章的内容(CPU执行的,指令性语句,不需要代码段)

  • 第五大题30分
    包括:CPU跟芯片进行相连的时候,地址的(存储器扩展)范围,接口芯片的地址有哪些
    综合性大题:(有几问)(30分)
    涉及到发光二极管的相关知识(这个发光二极管的知识在数电里面学过)
    涉及到 共阴极?共阳极?

指令

MOV
功能: 把源操作数送给目的操作数
语法: MOV 目的操作数,源操作数
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data

XCHG
功能: 交换两个操作数的数据
语法: XCHG
格式: XCHG r1,r2
XCHG m,r
XCHG r,m

PUSH,POP
功能: 把操作数压入或取出堆栈
语法: PUSH 操作数 POP 操作数
格式: PUSH r PUSH M PUSH data
POP r POP m PUSHF,POPF,PUSHA,POPA
功能: 堆栈指令群
格式: PUSHF POPF PUSHA POPA

LEA,LDS,LES
功能: 取地址至寄存器
语法: LEA r,m
LDS r,m
LES r,m

XLAT(XLATB)
功能: 查表指令
语法: XLAT XLATm

算数运算指令

ADD,ADC
功能: 加法指令
语法: ADD OP1,OP2
ADC OP1,OP2
格式: ADD r1,r2
ADD r,m
ADD m,r
ADD r,data
影响标志:C,P,A,Z,S,O

SUB,SBB
功能:减法指令
语法: SUB OP1,OP2
SBB OP1,OP2
格式: SUB r1,r2
SUB r,m
SUB m,r
SUB r,data
SUB m,data
影响标志:C,P,A,Z,S,O

INC,DEC
功能: 把OP的值加一或减一
语法: INC OP DECOP
格式: INC r/m DEC r/m
影响标志:P,A,Z,S,O

NEG
功能: 将OP的符号反相(取二进制补码)
语法: NEG OP
格式: NEG r/m
影响标志:C,P,A,Z,S,O

MUL,IMUL
功能: 乘法指令
语法: MUL OPIMUL OP
格式: MUL r/m
IMUL r/m
影响标志:C,P,A,Z,S,O(仅IMUL会影响S标志)

DIV,IDIV
功能:除法指令
语法: DIV OPIDIV OP
格式: DIV r/mIDIV r/m

CBW,CWD
功能: 有符号数扩展指令
语法: CBW CWD

AAA,AAS,AAM,AAD
功能: 非压BCD码运算调整指令
语法: AAA AASAAM AAD
影响标志:A,C(AAA,AAS) S,Z,P(AAM,AAD)

DAA,DAS
功能: 压缩BCD码调整指令
语法: DAA DAS
影响标志:C,P,A,Z,S

位运算指令集

AND,OR,XOR,NOT,TEST
功能: 执行BIT与BIT之间的逻辑运算
语法: AND r/m,r/m/data
OR r/m,r/m/data
异或XOR r/m,r/m/data
TEST r/m,r/m/data
NOT r/m
影响标志:C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位

SHR,SHL,SAR,SAL
功能: 移位指令
语法: SHRr/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
影响标志:C,P,Z,S,O

ROR,ROL,RCR,RCL
功能: 循环移位指令
语法: RORr/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL
影响标志:C,P,Z,S,O

程序流程控制指令集

CLC,STC,CMC
功能: 设定进位标志
语法: CLC STCCMC
标志位: C

CLD,STD
功能: 设定方向标志
语法: CLD STD
标志位: D

CLI,STI
功能: 设定中断标志
语法: CLI STI
标志位: I

CMP
功能: 比较OP1与OP2的值
语法: CMPr/m,r/m/data
标志位: C,P,A,Z,O

JMP
功能: 跳往指定地址执行
语法: JMP 地址

JXX
功能: 当特定条件成立则跳往指定地址执行
语法: JXX 地址
注:
A:ABOVE,当C=0,Z=0时成立
B:BELOW,当C=1时成立
C:CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立
E:EQUAL,当Z=1时成立
G:GREATER(大于),当Z=0且S=0时成立
L:LESS(小于),当S不为零时成立
N:NOT(相反条件),需和其它符号配合使用
O:OVERFLOW,O=1时成立
P:PARITY,P=1时成立
PE: PARITY EVEN,P=1时成立
PO: PARITY ODD,P=0时成立
S:SIGN,S=1时成立
Z:ZERO,Z=1时成立
LOOP

循环指令集

语法: LOOP 地址
LOOPE(Z)
地址 LOOPNE(Z) 地址
标志位: 无

CALL,RET
功能: 子程序调用,返回指令
语法: CALL 地址 RET RET n
标志位:无

INT,IRET
功能: 中断调用及返回指令
语法: INT n IRET
标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器

字符串操作指令集

MOVSB,MOVSW,MOVSD
功能: 字符串传送指令
语法: MOVSBMOVSW MOVSD
标志位: 无
CMPSB,CMPSW,CMPSD
功能: 字符串比较指令
语法: CMPSBCMPSW CMPSD
标志位: C,P,Z,S,O

SCASB,SCASW
功能: 字符串搜索指令
语法: SCASBSCASW
标志位: C,P,Z,S,O

LODSB,LODSW,STOSB,STOSW
功能: 字符串载入或存贮指令
语法: LODSBLODSW STOSB STOSW
标志位: 无

REP,REPE,REPNE
功能: 重复前缀指令集
语法: REP 指令S REPE 指令S REPNE 指令S
标志位: 依指令S而定

程序

  1. 通过键盘输入一个小写字母,找出对应的前导字母和后续字母,再按顺序显示这三个字母。

CODE SEGMENT

ASSUME CS:CODE

BEGIN:

    MOV      AH,07H  INT     21HMOV      DL,ALMOV        AH,02HSUB       DL,01HINT   21HADD      DL,01HINT       21HADD      DL,01HINT       21HMOV      AH, 4CHINT      21H

CODE ENDS
END BEGIN

  1. 从键盘输入10个字符,然后以与键入相反的顺序将10个字符输出到显示屏幕上。(定义数据段保存录入字符)

DATA SEGMENT
ARRAY DB 10 DUP(?), 0DH, 0AH, ‘$’
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

BEGIN: MOV AX, DATA

 MOV     DS, AXMOV       AH, 07HMOV      CX, 0AH

OPR:

 INT     21H MOV     BX,CX;  SUB     BX,01H  MOV     [BX],ALLOOP OPRMOV      AH, 09HLEA      DX, ARRAYINT        21HMOV      AH, 4CHINT      21H

CODE ENDS
END BEGIN

  1. 编写一个程序,要求比较数组ARRAY中的三个16位补码,并根据比较结果在终端上显示如下信息:
    1)如果三个数都不相等,显示0;
    2)如果三个输油两个相等,显示1;
    3)如果三个数都相当,显示2。

DATA SEGMENT
ARRAY DW 1224H, 1214H, 1234H
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

BEGIN:

 MOV     AX, DATAMOV     DS, AXLEA       BX, ARRAYMOV        AX, [BX]MOV     DX, 0002H[BX]CMP        AX, DXMOV       DX, 0004H[BX]JNE        STEP1CMP        AX, DXJNE       TAG1MOV     DL, '2'MOV        AH, 02HINT      21HJMP      OVER

STEP1: MOV AX, 0002H[BX]

 CMP     AX, DXJE        TAG1    MOV     DL, '0'MOV        AH,02HINT       21HJMP      OVER

TAG1: MOV DL, ‘1’

 MOV     AH, 02HINT      21H

OVER:

 MOV     AH, 4CHINT      21H

CODE ENDS
END BEGIN

  1. 编写一个程序,要求通过键盘接收一个个位数N,然后显示N个字母‘$’。

CODE SEGMENT
ASSUME CS:CODE
BEGIN: MOV AH, 07H

 INT     21HMOV      CL, ALSUB       CL, 30HMOV      CH, 00H

OUT1: MOV DL, ‘$’

 MOV     AH, 02HINT      21HLOOP OUT1MOV     AH, 4CHINT      21H

CODE ENDS
END BEGIN

  1. 将BX寄存器中的数用16位二进制数形式显示出来。

CODE SEGMENT
ASSUME CS:CODE
BEGIN: MOV AH, 01H

    INT        21HMOV        BH, ALINT        21HMOV        BL, ALMOV        AH, 02HMOV        DL, 0DHINT        21HMOV        DL, 0AHINT        21HMOV        CX, 16MOV        DH, 80H

LOOP16:

    TEST    BH, DHJZ        ZEROMOV        DL, '1'INT        21HSHL        BX,1LOOP    LOOP16JMP        OVER

ZERO: MOV DL, ‘0’

    INT        21HSHL        BX,1LOOP    LOOP16

OVER:

    MOV        AH,4CHINT        21H

CODE ENDS
END BEGIN

  1. 用15行*16列的表格形式显示ASCII码为10H-FFH的所有字符。
    CODE SEGMENT
    ASSUME CS:CODE
    BEGIN: MOV AH,02H

     MOV     CX,16MOV        DL,10HMOV       BH,15
    

LOOP1: INT 21H

 MOV     BL,DLMOV        DL,20HINT       21HADD      BL,1MOV     DL,BLLOOP   LOOP1MOV        CX,16MOV        DL,0DHINT       21HMOV      DL,0AHINT       21HMOV      DL,BLDEC        BHJNZ       LOOP1MOV        AL,0MOV     AH,4CHINT       21H

CODE ENDS
END BEGIN

微机原理 单片机笔记相关推荐

  1. CUMT微机原理复习笔记

    CUMT微机原理考试复习题,供复习的同学们参考 完整的题目:CUMT微机原理复习题https://download.csdn.net/download/qq_44842278/86438232

  2. 微机原理换行代码_微机原理学习笔记

    基础概论 硬件设备 主机系统: CPU 存储器 输入输出接口 总线 CPU 微处理器简称CPU,是计算机的核心. 主要包括: 运算器 控制器 寄存器组 存储器 定义: 计算机中的记忆装置.用于存放计算 ...

  3. 微机原理学习笔记——中断系统

    中断系统 目录 中断系统 一.中断的基本概念 中断源 开中断和关中断 中断优先权 中断向量表 中断过程 二.8086中断系统 中断源 可屏蔽中断周期 中断向量表 中断过程 三.可编程中断控制器8259 ...

  4. 微机原理学习笔记——位操作指令

    位操作类指令是以二进制数据进行的操作,结果对状态标志位有影响,位操作指令有三大类指令分别是:逻辑运算指令.移位指令.循环移位指令. 逻辑运算指令:与AND.或OR.非NOT.异或XOR.测试TEST ...

  5. 微机原理学习笔记-常见寻址方式

    常见寻址方式 文章目录 常见寻址方式 1. 立即数寻址 2.寄存器寻址(寄存器直接寻址) 3. 直接寻址(存储器直接寻址) 4. 寄存器间接寻址 5. 基址寻址 6. 变址寻址 7.比例变址寻址 8. ...

  6. 微机原理学习笔记-二进制转化为十进制

    除10取余法 设计程序时候的二进制转化为十进制的算法 二进制转化为十进制(除10取余法) 除10取余法中,对于二进制转化为10进制来讲要除于1010,就是把10转化为二进制数,再用二进制数除于1010 ...

  7. 微机原理学习笔记——寻址方式和传送指令(MOV)

    目录 操作数的寻址方式 立即数寻址方式 寄存器寻址方式 存储器寻址方式 段超越前缀指令 直接寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址方式 相对基址变址寻址方式 存储器寻址方式中的 ...

  8. 《微机原理与接口技术》期末复习笔记

    微机原理与接口技术 第01章 微机原理概述 基本知识 CPU:中央处理单元(Central Processor Unit),处理器,能够分析和执行指令的部件,能分析和执行指令的芯片就是CPU MPU: ...

  9. 【微机原理笔记】第 1 章 - 微型计算机基础概论

    微机原理笔记 - 主页 第 1 章 微型计算机基础概论 1. 微型计算机系统 (1)微型控制机是嵌入计算机的一种 8 位或 16 位机,没有操作系统. (2)计算机的基本组成( 3+1 结构):CPU ...

最新文章

  1. 基础设计模式:单例模式+工厂模式+注册树模式
  2. 华为手机接计算机,华为手机怎么连接电脑,详细教您华为手机怎么连接电脑
  3. Python(2)-- 运算符
  4. python中关于字符串的操作
  5. 从GC的SuppressFinalize方法带你深刻认识Finalize底层运行机制
  6. MySQL----示例知识点整理
  7. 【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制
  8. stylus之运算符(Operators)
  9. C#控件跨线程内容更新
  10. AliOS Things图形界面开发指南
  11. php计算字符串散列,php计算字符串的SHA-1散列函数sha1()
  12. sphinx的配置和管理
  13. zabbix中文乱码设置
  14. PyCharm 的初始设置
  15. sql实现根据身份证计算年龄
  16. 聚类算法小结(1)——K均值聚类算法
  17. 数位板使用技巧、个人数位板见解、插画教程...
  18. 友盟用户反馈自定义UI-Android
  19. 方舟仙境服务器什么时候修复,方舟生存进化2.0.0.5版本修复更新 6月22日联机地牢重新开启...
  20. 卷积神经网络——实例分割之Mask R-CNN论文翻译

热门文章

  1. keyberos认证问题导致GSS initiate failed
  2. Debug:‘boost::this_thread‘ has not been declared; undefined reference to ‘boost::this_thread...‘
  3. 3D真人手办,做一个迷你版的自己
  4. java调用ffmpeg把rtsp视频流保存为MP4文件
  5. 随机梯度下降法与批处理梯度下降法
  6. 常用方法——4.JS将yyyy-MM-dd HH-mm-ss格式日期转换成时间戳
  7. C#编程基础——循环语句
  8. SEO与SEM是什么?有何区别?
  9. JSON与事件和BOM
  10. python商品销售情况数据分析_用python分析小红书销售情况