汇编语言程序设计 第1章:基础知识

0. 前言

本门课程主要内容(汇编语言、计算机接口)

  1. 汇编语言部分:
    8088/8086CPU内部结构、内存管理机制、指令系统,伪指令、程序结构、DOS系统功能调用、编程训练。
    重点:寄存器名称及应用、内存分段机制、程序运行机制、编程训练。
    难点:利用汇编语言编程时的诸多限制,需记忆的内容也较多。
  2. 计算机接口技术部分:
    8088/8086CPU外部引脚特性、总线时序、常用接口芯片工作方式(8259、8253、8255、8250、8237等)、实验(用汇编语言编程驱动接口芯片)。
    重点:常用接口芯片的工作方式,利用汇编语言编程驱动芯片。
    难点:接口芯片工作过程中的信号时序。

为什么要学习这门课?
汇编语言是一门低级语言,其指令与机器指令几乎一一对应,能够从微观角度展示程序的执行以及子程序调用的实现过程,便于学生深入了解计算机系统,为后继学习计算机组成原理、操作系统等课程准备先导知识。
通过学习计算机接口技术,能够让学生了解计算机与外设进行数据传输的过程,帮助学生建立起微型计算机体系结构的基本概念。

编程环境(DOSBox,MASM,接口实验箱)

1.数字系统

数字系统定义了如何用独特的符号来表示一个数字。在不同的系统中,数字有不同的表示方法。

例如:1打,6对,12个,表示同一种数量。
数字系统可分为两类:
位置化系统非位置化系统

1.1 位置化系统(进位计数)

在位置化系统中,有一组固定的数字(数字的个数称为基数)和统一的规则,在一个数中,数字在不同的位置所代表的数值是不同的(该值等于数字本身乘以与它所在数位有关的常数,这个常数称为位权,简称权)。
常见位置化系统有:二进制系统、八进制系统、十进制系统、十六进制系统

在我们熟悉的十进制数中,可以使用10个不同的数字:0,1,2,3,4,5,6,7,8,9。即:十进制的基数就是10
例如:十进制数:185
其中1代表100,即1×100,百位的位权为100, (102)
其中8代表80,即8×10,十位的位权为10,(101)
其中5代表5,即5×1,个位的位权为1,(100)
185=1×102+8×101+5×100
总结:一个数的数值等于它的各位数码乘以相应位权的总和.

十进制(Decimal)
例如:十进制数678.5,可用678.5D 或 (678.5)10 表示。 展开形式:678.5D=6 × \times × 102+7 × \times × 101+8 × \times × 100+5 × \times × 10-1
二进制(Binary)
八进制(Octal)
十六进制(Hexadecimal)

在这里插入图片描述

二进制数、八进制数、十六进制数转换成十进制数
转换规则:任何进制数转换成十进制数时,只要将该进制数的每位数字乘以其对应的位权所得乘积相加,即得到与该进制数相对应的十进制数。
结论:用不同进制所表示的同一个数,虽然表现形式不同,但其数学意义是完全相同的

降幂法和乘/除法

1.2 非位置化数字系统

仍然使用有限的数字符号,每个符号有一个值,该值与其所占用的位置通常没有关系。也可以说是无权的数字系统。

例如:罗马数字是非位置化数字系统。

2. 数据的表示方法与存储

2.1 数据的单位

计算机中与数据存储有关的几个单位

  1. 比特 (bit):一个二进制位
  2. 字节 (Byte):8个二进制位为一个字节,存储容量以字节为单位计算
  3. 字 (word):计算机进行数据处理的基本单位
  4. 字长:每个字所包含的位数
  5. 计算机中的数量单位
    1K= 210 =1024
    1M= 1K·K =210×210 =220 =1048576
    1G= 1K·1M =230 =1073741824
    1T= 1K·1G =240 =1099511627776

2.2 数值数据

数值数据存储到计算机中,在转换成二进制形式的同时,还需解决如下问题:

  1. 无符号整数
    存储过程:
    第一步:将其转换成二进制数
    第二步:若数位不足,左侧补0
    在这里插入图片描述
    在这里插入图片描述

  2. 带符号整数
    机器数:在计算机中,把一个数连同其符号在内进行数值化表示的形式就称为机器数。
    在机器数中,一般用最高有效位来表示该数的正负:0表示正号,1表示负号
    常用的机器数有:原码、反码和补码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    机器数的用途
    原码、反码:计算机进行运算时中间结果的表示形式;
    补码:符号位能直接参与运算,补码也是计算机内的所有整数及整数的运算结果的最终表示

  3. BCD码
    计算机中常用四位二进制数来表示一位十进制数,这种编码称为BCD码Binary Code Decimal)。
    在这里插入图片描述

根据存储方式的不同,BCD码分为两种
压缩BCD码非压缩BCD码

在这里插入图片描述

2.3 文本数据

‘a’‘z’、’0’’9’、 ’*’、’#’ 等常用符号在计算机中存储时也用二进制数来表示,为了避免通信混乱,美国有关的标准化组织就出台了(American Standard Code for Information Interchange),即ASCII码,作为计算机间通信时共同遵守的西文字符编码标准,并被国际标准化组织接受。

ASCII码在内存占一个字节。
标准ASCII码值为0~127,适用于所有拉丁文字字母;
扩展ASCII码值为128~255,适用于特殊符号字符、外来语字母和图形符号。

常用的ASCII码值:
‘a’—97(61H)
‘A’—65(41H)
‘0’—48(30H)
在这里插入图片描述
在这里插入图片描述

为满足各种用户的需求,1990年国际组织开始研发由32位二进制数组成的Unicode (统一码),它为每种语言中的每个字符设定了惟一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
目前ASCII码是Unicode码的一部分。

三种数据表示方式的说明:

  1. BCD码:用二进制快速表示十进制数,可提高速度和精度
  2. ASCII码:用于西文字符的机内存储。
  3. 机器数:用于将符号数值化为0、1,便于计算。

3. 数据的运算功能

3.1 算术运算

  1. .二进制数算术运算(逢2进1)
  2. 十六进制数算术运算(逢16进1)

3.2 逻辑运算

  1. “与”:运算符用“∧”表示,(合取)用于对一个数的某些位清零
  2. “或”:运算符用“+”或“∨”表示,(析取)用于对一个数的某些位置1
  3. “非”:设A为逻辑变量,则它的非表示为 A ‾ \overline{\text{A}} A用于对一个数的所有位取反
  4. “异或”用于对一个数的某些位取反。

**“异或”**:运算符用“”表示

4. IBM PC计算机组织

4.1 微机结构

汇编语言是一种低级语言,与计算机的硬件密切相关,在学习汇编语言之前,必须先了解计算机硬件的基本组织结构。

在这里插入图片描述
本门课介绍汇编语言就是8088/8086汇编语言。

8088、8086CPU特性如下:

  1. 8086是16位机,8088是准16位机
  2. 8088与8086的指令系统完全兼容
  3. 8088/8086共有14个用户可用寄存器
  4. 8088/8086有20根地址线,可寻址 2 20 2^{20} 220=1MB存储空间。

4.2 存储器的组织

4.2.1 存储单元的地址和内容

  1. 地址
    计算机存储信息的基本单位是一个二进制位,一位可存储一个二进制数:0或1。每8个二进制位组成一个字节,8088/8086 的字长是16位,由两个字节组成,即一个包含两个字节,四个字节组成的存储单元称为双字
    在存储器里以字节为单位存储信息,每一个字节单元分配一个惟一的存储器地址,地址从0开始呈线性增长的。

8086的地址总线为20条,能提供的地址码个数为220=1M个,存储器是按字节编址的,即1M个地址就对应着1M个字节,即:8086能访问1MB的存储器空间,地址范围是:00000H~FFFFFH

  1. 内容
    一个存储单元中存放的信息称为该存储单元的内容
    00002H号字节单元的内容为78H,表示为:(00002H)=78H。

关于的规定:
一个字存入存储器要占用相继的两个字节,存放时低位字节存入低地址,高位字节存入高地址。这样两个字节单元就构成了一个字单元,字单元的地址采用它的低地址来表示
00002H号字单元的内容为:5678H
表示为:(00002H)=5678H

关于双字的规定:
双字单元的存放方式与字单元类似,它被存放在相继的4个字节中,低位存入低地址区,高位存入高地址区。双字单元的地址由其最低字节的地址指定
00002H号双字单元的内容为:12345678H
表示为:(00002H)=12345678H

4.2.2 分段

4.2.2.1 为什么分段?

8086地址总线为20条,能访问的存储器容量为1MB。为了访问这1MB的存储器空间,必须提供20位的地址码,而8086的寄存器为16位,最多能提供216=64K个地址,即最多能访问大小为64KB的存储器空间。这就是常说的8086的16位寄存器与1MB存储器空间之间的矛盾。为了解决这一矛盾,达到遍历1MB内存的目的,引入对存储器地址进行分段的方法。

4.2.2.2 分段方法

存储器的分段管理方法
计算机中规定:
(1)从0地址开始,每16个字节一小段
(2)若干个小段组成一个段,且一个段必须从一个小段的段首开始;
(3)每一的起始地址为段地址,低4位也一定是0,因此只取高16位;
(4)段内存储单元相对于段首的偏移量称为偏移地址;
(5)段地址和偏移地址合称为逻辑地址
在这里插入图片描述

4.2.2.3 PA和LA

在1MB的存储器空间里,每一个存储单元都有一个惟一的20位地址,称为该存储单元的物理地址。CPU访问存储器时,必须先确定所要访问的存储单元的物理地址才能访问该单元。逻辑地址(Logical Address)和物理地址(Physical Address)都可以定位存储器中的存储单元。
在这里插入图片描述
在这里插入图片描述

一个存储单元的物理地址是唯一的,而其逻辑地址却是不唯一的。

4.2.2.4 四种段

存储器可分成四种段:
代码段、数据段、附加段和堆栈段

  • 代码段:用来存放当前正在运行的程序;
  • 数据段:用来存放当前程序所需的数据;
  • 附加段:是附加的数据段,它是一个辅助的数据区;
  • 堆栈段:定义了堆栈的所在区域。
    每个段的最大长度不能超过64KB(原因:216=64K)

4.3 堆栈

是按照“先进后出”(FILO:First In Last Out)原则进行存取的一段特殊的存储器空间。
堆栈的一端是固定的,称为栈底,别一端是浮动的,称为栈顶,数据的插入和删除均在栈顶进行,而且只能以字为单位来进行操作。

5 Intel 8086微处理器

5.1 结构图

在这里插入图片描述

5.2 Intel8086寄存器组

寄存器可以分为四类:
通用寄存器、段寄存器、地址寄存器、专用寄存器

5.2.1 通用寄存器:16位寄存器,可用来存放数据、地址

  • AX:是算术运算的主要寄存器,高字节AH,低字节AL;
  • BX:经常用作基址寄存器,高字节BH,低字节BL;
  • CX:常用来保存计数值,高字节CH,低字节CL;
  • DX:用于双字长运和I/O指令,高字节DH,低字节DL。

5.2.2 段寄存器:16为寄存器,用来存放段地址

  • CS:存放代码段的段地址;
  • DS:存放数据段的段地址;
  • ES:存放附加段的段地址;
  • SS:存放堆栈段的段地址。

5.2.3 地址寄存器:16位寄存器,用来存放偏移地址

  • SP:堆栈指针寄存器,访问堆栈时,用来提供堆栈的
    栈顶元素的偏移地址;
  • BP:基址指针寄存器,访问堆栈时,用来提供堆栈中
    存储单元的偏移地址;
  • SI:源变址寄存器,常用于串处理指令;
  • DI:目的变址寄存器,常用于串处理指令。

5.2.4 专用寄存器:包括IP和FLAGS

  1. IP:指令指针寄存器,用来存放代码段中的偏移地址,
    始终指向下一条指令的首地址
    工作过程:当前指令执行完后,由CS:IP得到物理地址,当这一地址送到存储器后,控制器可以取得下一条要执行的指令,同时,IP自动指向再下一条指令的首地址。
    计算机就是用IP寄存器来控制指令序列的执行流程。
  2. FLAGS:标志寄存器,又称程序状态字(Program Status Word)PSW,用来保存一条指令执行之后,CPU所处状态的信息及运算结果的特征。
    共设置了9个标志,共占用2个字节。
    根据各标志位功能的不同,分为两类:
    条件标志位和控制标志位
    在这里插入图片描述

条件标志位:用来记录程序中运行的结果,根据有关指令的运行结果由CPU自动设置。常作为后续条件转移指令的转移控制条件。(6个)

  1. OF:溢出标志。如果操作数超出了机器能表示的范围称为溢出,此时OF=1,否则OF=0
  2. SF:符号标志,记录运算结果的符号。结果为负时SF=1,否则SF=0 ‘
  3. ZF:零标志。运算结果为0时ZF=1,否则ZF=0。
  4. CF:进位标志,记录运算时从最高有效位产生的进位值。
    有进位时CF=1,否则CF=0。
  5. AF:辅助进位标志,记录运算时第3位(半个字节)产
    生的进位值。有进位时AF=1,否则AF=0。
  6. PF:奇偶标志。当结果中1的个数为偶数时PF=1,否
    则PF=0。

控制标志位,控制CPU的工作状态。(3个)

  1. DF:方向标志位,在串处理指令中用于控制处理信息的方向。当DF=0时,正向(即从低地址向高地址)处理数据串;当DF=1时,反向(即从高地址向低地址)处理数据串。
  2. IF:中断标志。当IF=1时,CPU开中断,允许CPU响应可屏蔽中断请求,当IF=0时,CPU关中断,屏蔽上述中断请求。
  3. TF:陷阱标志。当TF=1时,CPU处于单步工作方式,即每执行完一条指令后,CPU自动产生一个陷阱中断,使程序单步执行;当TF=0时,CPU正常工作,不产生陷阱中断,程序正常执行。

6. 输入/输出设备

输入/输出设备与主机通过接口进行联络。
在这里插入图片描述

每个接口包括一组寄存器,根据其用途,通常分为三类:

  1. 数据寄存器:存放要输入/输出设备和主机间传送的数据。
  2. 状态寄存器:保存输入/输出设备或接口的状态信息。
  3. 命令寄存器:CPU给输入/输出设备或接口的控制命令通过此寄存器传送出去。

接口中的这些寄存器又称为端口,每一个端口被赋予一个端口地址( 也称端口号 ),端口地址的范围为0000H~FFFFH,共计64K个,8086机器中存储器和端口的编址分属两个不同的地址空间,互不干扰。

7. 总结

在这里插入图片描述在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵远疴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值