8086

INC AX ;加1指令。将字操作数AX中的数值加1

DEC BL ;减1指令。将字节操作数BL中的数值减1

PUSH AX ;进栈指令。将AX中的字压入堆栈

JMP LAl ;无条件转移指令。将程序转移到标号为LAl的指令继续执行

MOV AX,5 ;传送指令。将操作数送入目的操作数AX中

ADD AX,BX ;加法指令。将AX和BX相加,结果再传入AX中

CBW ;字节转换为字指令
CLC ;进位标志CF清零
NOP ;不操作指令
HLT ;停机指令

标志位:
进位标志NC,即CF,CF= 0 则无进位
溢出标志NV,即OF,OF= 0 则不溢出
零标志NV,即ZF,ZF= 0 则结果不为零
符号标志PL,即SF,SF= 0则结果是正数

指令长度 :
指令的长度会影响存储空间。在编写程序时,如果有多种类型的指令可以完成相同的任务,那么选用较短的指令可有效地压缩程序占用的存储空间。

基础知识


计算机基本原理

冯 诺依曼计算机的原理

计算机的基本工作原理是存储程序和程序控制。
冯诺依曼计算机的基本特点:
(1)采用存储程序方式。
(2)存储器是按地址访问的。
(3)指令由操作码和地址码构成。
(4)机器以运算器为中心。

冯 诺依曼计算机的基本结构

计算机由运算器、控制器、存储器、输入设备、输出设备五大部件组成。
运算器和控制器合称为中央处理器(CPU)。
各部分之间由系统总线相连。系统总线分为:**地址总线(A-BUS)、数据总线(D-BUS)、控制总线(C-BUS)

1.中央处理器(CPU)

CPU主要由算数逻辑运算单元ALU、地址发生和控制单元、指令译码单元、数据存储单元、总线驱动单元、时序控制单元等组成。

2.存储器

存储器分为内存和外存。内存又称为主存,用于存储计算机当前正在运行的程序、正在处理的原始数据、中间数据和最终结果,内存的各存储单元可由CPU直接寻址。

3.总线和接口

计算机总线分为内部总线和外部总线。内部总线指的是CPU内部各个部件之间的连线。外部总线又称为系统总线,是连接计算机主板上各个芯片以及各个接口部件的总线,系统总线分为地址总线、数据总线、控制总线。
外部设备和计算机之间必须有的中间缓冲部件又叫接口,接口分为并行接口和串行接口。
并行接口:同时并行地传送多位数据。
串行接口:数据是一位一位传输的。

微型计算机系统

微型计算机系统概念

8086寄存器组

1.数据寄存器

AX通用寄存器,主要作为累加器用,所以它是算数运算的主要寄存器。
BX通用寄存器,还用作基址寄存器。
CX通用寄存器,还用作计数器。
DX通用寄存器,在做双精度运算时还用来与AX一起存放一个双字操作数(32位二进制数),其中DX存放高字(高16位),AX存放低字(低16位)

2.地址寄存器

地址寄存器包括指针和变址寄存器SI、DI、SP、BP四个16位寄存器,用来存放存储器操作的偏移地址,也可以作为通用寄存器。严格来说,用来存放存储器偏移地址的寄存器都应该归类为地址寄存器,如BX基址寄存器、IP指令指针寄存器等。
SI源变址寄存器,用于指出存放源缓冲区的偏移地址。
DI目的变址寄存器,可用于存放目的缓冲区的偏移地址。
SP堆栈指针寄存器,用于指出堆栈区栈顶的偏移地址。
BP基址指针寄存器,用于指出堆栈区某个单元的偏移地址。

3.段寄存器

CS代码段寄存器,用于指出存放程序的代码段的段地址。
DS数据段寄存器,用于指出存放数据的数据段的段地址。
ES附加段寄存器,用于指出存放附加的数据段的段地址。
SS堆栈段寄存器,用于指出堆栈区的堆栈段的段地址。

4.控制寄存器

控制寄存器包括IP和FLAGS(又称为PSW程序状态字),用于控制程序的执行。
IP指令指针寄存器,用来存放代码段中的偏移地址,指出当前正在执行指令的下一条指令所在单元的偏移地址。
FLAGS标志寄存器的某位代表CPU的一个标志,表示出CPU的某种执行状态,8086的标志寄存器共有9个标志,分别为6个条件码标志和3个控制标志。
条件码标志如下:
CF进位标志,当指令执行结果的最高位向前有进位时,CF= 1,否则CF=0。
SF符号标志,当指令执行结果的最高位(符号位)为负时,SF=1,否则SF=0。
ZF零标志,当指令执行结果为0时,ZF=1,结果不为0时ZF=0。
OF溢出标志,当指令执行结果有溢出(超过了数的表示范围)时,OF=1,否则OF=0。
AF辅助进位标志,当指令执行结果的第3位(半字节)向前有进位时,AF=1,否则AF=0。
PF奇偶标志,当指令执行结果中1的个数为偶数个时,PF=1,否则PF=0。
控制标志如下:
DF方向标志,执行串处理指令时,若设置DF=0,存储单元的地址寄存器的值自动增加,若设置DF=1,存储单元的地址寄存器的值自动减小。
IF中断标志,设置IF=1,允许CPU响应可屏蔽中断,IF = 0,则不影响。
TF陷阱标志,在DEBUG调试时,TF=1,采用单步执行方式,即进入陷阱;TF=0,正常执行程序。

注:逻辑地址不唯一,多个物理地址可对应同一物理单元上。

指令系统与寻址方式

指令系统

指令系统的定义

指令系统是计算机所能执行的各种代码指令的集合。计算机体系不同,指令系统也不同,不可互换。

指令的分类

1.数据传送指令
2.算术运算指令
3.逻辑运算指令
4.串处理指令
5.控制与转移指令
6、处理机控制指令

指令的寻址方式

寻址方式

定义:寻找操作数的方法。
操作数可以分为:
数据操作数和转移地址操作数

按照操作数类型不同,寻址方式也分为两大了类:
与数据有关的寻址方式和与转移地址有关的寻址方式

注:除了转移指令、循环指令、子程序调用指令等与转移地址有关之外,其他指令的寻址方式都与数据有关。

与数据有关的寻址方式划分为三类:
立即寻址方式、寄存器寻址方式、储存器寻址方式。
其中储存器寻址方式包括:
1.直接寻址方式
2.寄存器间接寻址方式
3.寄存器相对寻址方式
4.基址变址寻址方式
5.相对基址变址寻址方式

立即寻址方式

所要找的操作数直接写在指令中,这种操作数叫立即数
注:立即寻址只能用于源操作数子段,立即数的类型必须与目的操作数的类型一致,目的操作数是字节,立即数也必须是字节。

立即寻址方式的操作数就在指令中,而指令本身在代码段中存放。

寄存器寻址方式

操作数在寄存器中,CPU在寄存器中得到操作数,不用访问内存,这种寻址方式指令短、速度快,但是可用的资源少。

8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL
16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP

例:
MOV AX,4650H ;目的操作数寄存器寻址方式,源操作数是立即寻址方式

存储器寻址方式

在编写汇编程序时存储器的地址是以逻辑地址形式表示的,因此这一类寻址方式在指令中要表示出有效地址EA。对于双操作数指令而言,两个操作数不允许同时用存储器寻址方式,即不允许两个操作数都是存储单元。

1.直接寻址方式

操作数的有效地址EA直接写在指令中,操作数的段地址为数据段,由DS指出。CPU根据EA和段地址DS计算出物理地址后,再访问存储器取出操作数的数值。

操作数的物理地址:(DS)*10H+EA

对于直接寻址方式而言,必须用前缀“DS:”指出该单元在数据段中。例如,DS:[2000H]代表一个数据段的存储单元,其偏移地址为:2000H。

直接寻址方式适于处理单个变量。存储单元的名字(偏移地址)为变量名,存储单元的内容为变量值。

(1)存储器读操作

MOV指令可以实现CPU对存储器的读写操作。若传送指令的目的操作数是CPU的寄存器,源操作数是存储单元,就完成了对存储器的读操作。至于读出的是字还是字节,要看目的操作数的寄存器是字型还是字节型的。

(2)存储器的写操作

把MOV指令的目的操作数变为存储单元,源操作数为CPU的寄存器。

(3)符号地址

为存储单元定义一个名字,该名字就是符号地址。如果把存储单元看成变量,该名字也是变量名。
采用符号地址时,如果用数据定义伪指令DB、DW等定义的存储单元名字,其对应的段默认为数据段;但是若用EQU符号定义符号地址,则需要加上前缀“DS:”
汇编语言源程序在汇编是时,符号地址被转换为实际的偏移地址。
例:
VALUE DW 5678H
MOV AX,VALUE ;VALUE是符号地址,也可以用中括号括起来
MOV AX,[VALUE];段地址默认为数据段DS

(4)段超越

在与内存有关的寻址方式中,操作数默认为数据段。如果操作数在其他段中存放,称为段超越,需要在指令中用段超越前缀指出,即用操作数前加上段寄存器和冒号表示。
例:
VALUE EQU 1000H ;EQU符号定义伪指令,表示VALUE = 1000H
MOV AX,DS:[VALUE] ;存储单元在数据段
MOV AX,ES:[VALUE] ;ES:段超越前缀,指出操作数在附加段

2.寄存器间接寻址方式

操作数的EA在基址寄存器BX、BP或变址寄存器SI、DI中,而操作数的段地址在数据段DS或堆栈段SS中。如果有效地址由BX、SI、DI指出,则默认对应于数据段,而用BP指出则对应于堆栈段 由于EA是间接从寄存器中的到的,所以称为寄存器间接寻址。8086CPU只允许BX、BP、SI、DI这四个寄存器作为间址寄存器。

在这种寻址方式中,操作数同样可以用段超越前缀。此寻址方式适于简单的表格处理。

3.寄存器相对寻址方式

MOV AX,[BX+1234H]
操作数的EA是一个基址或变址寄存器的内容再加上8位或16位位移量之和。
由于有相对的位移量,所以成为寄存器相对寻址方式。此寻址方式常用于草表操作。可利用寄存器做首地址,用位移量做指针寻找表中特定的单元;或用位移量做表格的首地址,用寄存器做指针,来连续查表。

例:
MOV [BX+2635H],AX ;位移量也可以写在中括号内
MOV[BX].2623H,AX ;位移量可用小点连接

4.基址变址寻址

操作数存放在内存中,指令形式如下:
MOV AX,[BX+SI]
操作数的EA为一个基址寄存器和一个变址寄存器的内容之和。该寻址方式可用于二维表的处理。
例:
MOV AH,ES:[SI+BX];源操作数ES:段超越前缀,指出操作数在附加段,操作数的EA在基址寄存器BX和变址寄存器SI中,为二者之和。

5.相对基址变址寻址方式

操作数存放在内存中。指令的形式如下:
MOV AX,[BX+SI+1234H]
操作数的EA为一个基址寄存器加一个变址寄存器再加一个位移量,三者之和。该寻址方式可用于二维表查表和栈处理。
例:
MOV AX,MASK[BX][SI]
或MOV AX,[MASK+BX+SI]
或MOV AX,[BX+SI].MASK
有效地址:
EA = MASK+(BX)+(SI)
物理地址:
(DS)*10H+EA
相对基址变址寻找方式可以方便地在二维表中查找某元素。例如可令MASK作为表首址,BX代表行SI代表列,即可查找表中元素。

一字节8bit
一字16bit
双字32bit

汇编语言程序设计

汇编语言程序设计基础知识相关推荐

  1. 程序设计基础c语言版习题答案,C语言程序设计基础知识 习题一及参考答案

    C语言实用复习题目及答案.帮你更好地学习C程序设计~ 第一章:程序设计基础知识 一. 单项选择题 1.以下( )是面向过程的程序设计语言. A)机器语言 B)汇编语言 C)高级语言 D)第四代语言 2 ...

  2. python程序设计基础知识

    程序设计基础知识 1根据执行方式不同,编程语言分为两类: 静态语言:使用编译执行的编程语言 C/C++语言.Java语言 脚本语言:使用解释执行的编程语言 Python语言.JavaScript语言. ...

  3. php程序设计ppt,PHP程序设计基础知识.ppt

    <PHP程序设计基础知识.ppt>由会员分享,可在线阅读,更多相关<PHP程序设计基础知识.ppt(14页珍藏版)>请在人人文库网上搜索. 1.第3章 PHP程序设计基础知识( ...

  4. 嵌入式:ARM汇编语言程序设计基础教程

    文章目录 汇编语言程序设计的步骤 顺序程序设计 分支程序设计 循环程序设计 子程序设计 寄存器传递参数方式 存储区域传递参数方式 堆栈传递参数方式 汇编语言程序设计的步骤 ① 合理地分配存储器资源,将 ...

  5. 计算机算法与程序设计基础知识,算法与程序设计试题带答案

    高一第二学期<算法与程序设计>学分认定试题 学校:_____________ 班级:____________ 学号:____________ 姓名:____________ 一.单选题(每 ...

  6. C语言程序设计基础知识——谭浩强版

    1.一个程序应包括: 对数据的描述.在程序中要指定数据的类型和数据的组织形式,即数据结构. 对操作的描述.即操作步骤,算法. 程序=算法+数据结构 2.C源程序的结构特点 可以由一个或多个源文件组成. ...

  7. 2020-09-27程序设计基础知识

    1.进制: 十进制变二进制: 八进制变二进制:(15552)=(001 101 101 101 010) 将对应数字用二进制表示出来,再进行组合,开头的0可以去掉. 000=0 001=1 010=2 ...

  8. vfp体积计算机程序,2017计算机二级VFP复习:VFP程序设计基础

    大家做好准备迎接考试了吗?出国留学网计算机等级考试栏目诚意整理"2017计算机二级VFP复习:VFP程序设计基础",欢迎广大考生前来学习. VFP程序设计基础 知识要点 1.Vis ...

  9. ACM程序设计基础结课总结

    ACM程序设计基础结课总结 目录: 1.ACM程序设计基础学习感悟: 2.ACM程序设计基础知识学习心得: 3.ACM程序设计基础知识学习收获: ACM程序设计基础学习感悟: 从最开始上了大学接触到编 ...

  10. 画出识别c语言注释的转换图,C语言程序设计基础与实训教程》第1章:基础知识.ppt...

    <C语言程序设计基础与实训教程>第1章:基础知识.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计基础与实训教程>第1章:基础知识.ppt(25页珍藏版)> ...

最新文章

  1. matlab产生一列相同的数据,读取excel中的数据把第一列相同的所有行数据输出成一个excel...
  2. 将军令:数据安全平台建设实践
  3. java制作程序启动进度窗口
  4. 经纬度坐标系与UTM MGRS坐标系之间的转换 c# 版本
  5. maven占位符$变量无法替换
  6. 用java求直角三角形的面积_JAVA 已知三角形的三个边判断 是否为直角三角形,如果是求面积!...
  7. keras手写数字识别--入门
  8. 比特币可视化工具_这个比特币交易“可视化”网站,用一辆公交车带你“上车”...
  9. 宝塔面板FTP连接方法
  10. vue 花括号里面的变量_二、Vue条件指令
  11. H3C无线AC+AP配置3-双信号
  12. python 100以内3的倍数_在python中确定3或5的倍数
  13. 学生电影网页设计作品 影视主题学生网页制作 简单网页设计作业 静态影视介绍网页模板
  14. 【信仰充值中心】Pale Moon 29 正式版更新日志
  15. 在计算机运行时 把程序和数据存放在内存中,单选(2.5分) 在计算机运行时,把程序和数据一样存放在内存中,这是1946年由__________领导的小组正式提出并论证的。‍...
  16. 做一个学(chou)习(ka)游戏(一)
  17. vue分页组件,可直接使用
  18. Navicat12.1破 解教程,亲测可用
  19. atm机存款场景图_怎么在自动存款机上存款?有图具体步骤的更好?
  20. 论文《Face Alignment at 3000 FPS via Regressing Local Binary Features》笔记

热门文章

  1. hfss matlab api 天线,应用HFSS-MATLAB-API设计圆极化微带天线
  2. wincc 服务器授权型号,WinCC V7.5 SP1软件安装及授权方法
  3. VC++运行库安装难题
  4. 视频监控存储解决方案——快速、可靠的视频存储
  5. Qt网络编程-简易版TcpClient入门Demo(1)
  6. 【图解深度学习】【章节:1-1.2 | 神经网络输入输出】连小学生都能看懂的深度学习基础总结
  7. vue-cli搭建项目引入jquery和jquery-weui步骤详解
  8. VBA的表单控件初接触(2):ActiveX控件的基础功能和基础代码
  9. java+整合handwrite_GitHub - wmz46/HandWriteRecognizer: 封装Microsoft.Ink为C++动态库,可供其他语言调用手写识别...
  10. 视频、网络传输速率科普