零、DOS基本功能的调用(int 21H)
功能号 | 入口参数 | 出口参数 | 说明 |
AH=01H | AL=ASCII字符 | 从键盘输入一个字符 | |
AH=02H | DL=欲显示的ASCII字符 | 显示一个字符 | |
AH=09H |
DS:DX=欲显示字符串的逻辑地址 | 1.必须以'$'结尾 2.因为入口参数是地址所以总是以offset xxx的形式写 |
|
AH=0AH | DS:DX=键盘输入缓冲区逻辑地址 | 读取一个字符串 |
(总感觉入口出口的位置是不是有问题……但是教材上是这样
一、关于8086处理器
- 组成:总线接口单元BIU(Bus Interface Unit)+执行单元EU(Execution Unit)
- 组成结构图
- 一条指令的执行过程——取指和执行
- 指令在存储器中的地址由代码段寄存器CS和指令指针寄存器IP共同提供,再由地址寄加法器得到20位存储器地址。
- BIU完成取指(是处理器最频繁的操作,8086中为预取,实现了最简单的指令流水线)
- EU完成执行。
- 寄存器
- 从应用的角度可以分成透明寄存器和可编程寄存器。
- 可编程寄存器可以分成通用寄存器和专业寄存器
- 通用寄存器:一般是指处理器中最经常使用的整数通用寄存器,可用于保存数据、地址等。如图上所示8086共有八个通用寄存器。
- 数据寄存器又可以分成高字节H和低字节L两个部分。高对高低对低。
- 用途包括存放数据、暂存运算结果、存放存储器地址、作为变量的指针。
- 具体特定作用表格如下:
- 标志寄存器FLAGS
- 状态标志(6)
- 进位标志CF//Carry Flag
- 奇偶标识PF//Parity Flag
- 调整标志AF//Adjust Flag
- 零标志ZF//Zero Flag
- 符号标志SF//Sign Flag
- 溢出标志OF//Overflow Flag
- 控制标志(3)
- 方向标志DF//Direction Flag
- 中断允许标志IF//Iterrupt-enable Flag
- 陷阱标志TF//Trap Flag
- 状态标志(6)
- 指令指针寄存器IP
- 专用寄存器 自动增量
- 段寄存器
- 代码段寄存器CS
- 数据段寄存器DS
- 堆栈段寄存器SS
- 附加段寄存器ES
- 存储器
- 存储单元和存储单位
- 字节编址:主存储器的每个存储单元具有一个地址,保存一个字节的信息。
- 一个二进制数据的右边最低位称为最低有效位LSB//D0位
- 左边最高位称为最高有效位MSB
- 物理地址和逻辑地址
- 8086处理器具有20位地址总线,故可以支持1M个存储单元 每个存储单元可以保存一个字节数据
- 寄存器为16位,故逻辑段空间不超过64KB
- 段内存储单元使用16位地址表示,且每个段只能起始于低4位(二进制)都为零的物理地址
- 逻辑地址包括基址地址和偏移地址 都可以用十六位表示。
- 段基地址(段地址)确定该段在主存中的起始位置。
- 以段基地址为起点,段内的位置可以用距离该起点的位移量表示,称为偏移地址
- 逻辑地址为1460H:0100H则物理地址为14700H
- 同一个物理地址可以有多个逻辑地址
- 应用程序的基本段
-
段名称 段基地址 偏移地址 代码段 CS IP 堆栈段 SS SP 数据段 DS EA 附加段 ES EA
-
- 存储器的分段管理
- 各段之间可以分开可以重叠
- 存储单元和存储单位
二、汇编语言的格式
- 指令代码格式
- 操作码占1或2字节
- 语句格式
- 每条语句占一行 续行符‘\’ 每行不超过132字符
- 执行性语句——表达处理器指令的语句:
- 标号: 处理器指令助记符 操作数,操作数;注释
- 说明性语句——表达汇编程序命令的语句:
- 名字 伪指令助记符 参数,参数,……;注释
- 标号与名字
- 冒号前的标号表示处理器指令在主存中的逻辑地址
- 标识符一般最多由31个字母、数字、和特殊符号(_、$、?、@)组成
- 不能以数字开头
- 每个源程序自定的标识符必须唯一,且不能是保留字
- 不区分大小写
- 程序框架
-
- 例子
- .model small
- .stack
- .data
- ……
- .code
- .startup
- ……
- .exit
- ……
- end
-
- small 是一种存储模型;存储模型后还可以定义语言类型 略了
-
三、课后习题!
1.1(1)传统计算机的5大部件演变为现代计算机的哪3个硬件子系统?
源于冯诺依曼设计思想的计算机的5大部件:控制器、运算器、存储器、输入设备、输出设备;
3个硬件子系统:处理器、存储系统、输入输出系统。
(3)什么是通用寄存器?
通用寄存器一般是指处理器中最经常使用的整数通用寄存器,可用于保存数据、地址等。
(7)汇编语言中的标识符与高级语言的变量和变量名的组成原则有本质的区别吗?
没有。
(8)汇编语言的标识符大小写不敏感意味着什么?
表示大小写不同但是是同一个符号。
(9)汇编语言源程序文件中,END语句后的语句会被汇编吗?
不会。
1.2 判断题
(1)AX被称为累加器,在8086程序中使用很频繁。
对。
(6)处理器的传送指令MOV属于汇编语言的执行性语句。
对。
(8)MASM汇编语言的注释用分号开始,但不能用中文分号。
对。
(10)源程序文件和列表文件都是文本性质的文件。
没查到,我觉得对。
1.3 填空题
(1)8086处理器支持 1M 容量主存空间,因为它有20个地址总线信号。
(2)一个比特位是一个二进制位, 8位 被称为一个字节。
(3)8086处理器有8个16位通用寄存器,其中AX, BX , CX 和DX可以分成八位操作;另外四个是 SI , DI , SP , BP 。
(4)寄存器DX是 16 位的,但可以分成两个8位的寄存器,其中D0~D7和D8~D15部分可以用名程 DH 和 DL 表示。
(5)8086处理器有 4 个段寄存器,他们都是 16 位的。
(6)8086分段管理主存储器,但要求起始段始于 段基地址后四位均为零 的物理地址位置,并且每段最大不超过 64KB 。
(7)逻辑地址由 段基地址 和 偏移地址 两个部分组成。代码段中下一条要执行的指令由 CS 和 IP 寄存器指示。
(9)指令由表示指令功能的 操作码 和表示操作对象的 操作数(地址码) 部分组成。
(10)MASM要求汇编语言源程序文件的扩展名是 .ASM ,汇编产生扩展名为.OBJ文件被称为 目标模块 文件,可执行文件通常使用 .EXE 扩展名。
1.6 将如下8086的逻辑地址用其物理地址表示(均为16进制形式)
(1)FFFF:0 FFFF0H
(2)40:17 00417H
(3)2000:4500 24500H
(4)B821:4567 BC777H
1.7 应用程序中主要有哪三类基本段,各有什么用途?
代码段:存放程序的指令代码
数据段:存放当前运行程序所用的数据
堆栈段:主存中堆栈所在的区域
1.11 汇编语言语句有哪两种,每种语句由那四个部组成?
两种语句:执行性语句,说明性语句
四个部分:标号 指令助记符 操作数或参数 注释
1.13 MASM汇编语言中,下面哪些是程序员可以使用的自定义标识符
FFH √
DS
Again √
next √
@data
h_ascii √
6364b
small