汇编语言程序设计基础知识一

一、计算机语言

二、计算机运算基础

三、微型计算机的结构

1、8086微型处理器的结构

1.1、内部结构

执行单元(EU):

计算指令将要寻址的内存单元的有效地址,然后送到总线接口单元

完成指令规定的操作

总线接口单元(BIU):

根据EU的请求,形成实际地址,完成CPU与存储器或I/O接口之间的数据传送

1.2、寄存器和标志

1.2.1、通用寄存器

16位

存放一般性数据

主要功能:保存CPU分析和执行时产生的中间结果

说明
AX = AH + AL主累加器
BX = BH + BL基址寄存器
CX = CH + CL计数寄存器
DX = DH + DL数据寄存器
1.2.2、指针与变址寄存器
说明
SP堆栈指针
BP基址指针
SI源变址寄存器
DI目的变址寄存器
IP指令指针
1.2.3、段寄存器
说明
CS代码段寄存器
SS堆栈段寄存器
DS数据段寄存器
ES附加段寄存器
1.2.4、标志寄存器
说明
CF进位标志,当向最高位进位和借位时为1,可用来判断无符号数是否发生溢出
OF溢出标志,反映有符号数是否发生溢出
AF辅助进位标志,第三位向前的进位或借位
PF奇偶标志,低八位中1的个数是奇数还是偶数,偶数为1
SF符号标志,最高位的状态
ZF零标志,结果为0则为1
1.2.5、双符号位

对参与运算的数据扩展一位符号位,拓展的符号位与原符号位相同

如果结果的双符号位一致,则没有发生溢出,反之,发生溢出

1.3、寻址方式概述

1.3.1、基本知识

存储器是一维线性结构

内存单元的地址(物理地址或实际地址)

存储单元的内容:一个存储单元的有效信息。存储器的内容是取之不尽的,取出后该单元仍保持原来的内容不变,只有存入新的信息后,原来的信息自动消失

1.3.2、8086系统存储器的机构特点

可寻址空间:1MB(20位)

存储方式:按字节存储,20位

一个字节八位,一个字等于两个字节16位

1.2.3、分段结构

为什么?以8086为cpu的计算机的内存最大容量为1MB,需要20位物理地址,但是8086是16位cpu,20位存储器地址无法直接通过16位寄存器给出

什么是?将1MB的存储空间划分为长度不超过64KB的逻辑段,段内地址连续,段与段之间相互独立,每个段有一个基本地址(段首地址),叫做段地址,段内存储单元地址通过段地址+段内偏移地址(该段距离段地址的字节数)得到

1.2.4、实际地址的产生

逻辑地址:

段基址和段内偏移地址组成

段基址:段内偏移地址

实际地址(物理地址):

存储器的绝对地址,20位,

= 段基址 * 16 + 段内偏移地址

= 段基址 * 10H + 段内偏移地址

段首地址

段基址 * 16

1.4、寻址方式

1.4.1、固定寻址

指令要存做的数据在指令中没有明确给出,当隐含在指令中

1.4.2、立即寻址

指令要操作的数据包含在指令码中

1.4.3、寄存器直接寻址

在指令给出寄存器的名字,要操作的数据在该寄存器中

1.4.4、存储器寻址
1.4.4.1、存储器直接寻址

[ 有效地址 ]

1.4.4.2、寄存器间接寻址

[ BX/SI/DI ]

1.4.4.3、基址寻址

[ BX+位移量 ]

[ BP+位移量 ]

1.4.4.4、变址寻址

[ SI+位移量 ]

[ DI+位移量 ]

1.4.4.5、基址变址寻址
1.4.5、注意

在存储器寻址方式中只给出了偏移地址,段地址是隐含的,一般是DS,只有基址寄存器是BP时,段寄存器是SS

除源操作数为立即寻址方式外,其中一个操作数的寻址方式必须是寄存器直接寻址

四、汇编语言

1、汇编语句格式

1.1、字符集

1.2、格式

[ 标号 ] 操作符 操作数 [ ;注释 ]

标号:程序设计人员自己定义的标识符号,用于表示内存单元的地址

标号的规则:

第一个字符不能是0~9的数字,机器指令语句中标号必须以冒号结束,伪指令语句中的标号不允许以冒号结束

标号的本质:内存单元的逻辑地址

标号的三个属性:

1、段值属性:在数据段中定义的标号段值是DS的值,在代码段中定义的标号的段值是CS的值,可以用SEG取得

2、偏移量属性:标号所在段其实偏移地址到它的存放位置之间的字节数,可以用OFFSET取得

3、类型属性:DB、DW等,也可以是表示机器指令代码中的地址时的NEAR、FAR,可以用TYPE得到

操作符:可以是指令助记符、伪指令助记符、宏指令符号

操作数:操作符的对象,可以是数据本身、标号、寄存器名、算术表达式

2、汇编语言中数据的表示方法

2.1、数据在机内的表示

数据的浮点表示法(IEEE754)——以短实数为例

eg. 36.625

(1)转换为二进制 100100.101

(2)规格化后为 1.00100101 * 2^5

(3)阶码为(规格化后的2的多少次方为阶码) 101

(4)加过余量127后(阶码加) 0111 1111 + 0000 0101 = 1000 0100

(5)尾数(23位,规格化后的小数部分,不足23位用0补齐)001 0010 1000 0000 0000

(6)符号&阶码&尾数 0100 0010 0001 0010 1000 0000 0000

​ 4 2 1 2 8 0 0

判断浮点数的大小:

先看符号,再看阶码(阶码大则绝对值大),最后看尾数

2.2、数据的书写形式

3、运算符

3.1、算术运算符

±*/

MOD:取余

SHL:左移

SHR:右移

3.2、逻辑运算符

AND、OR、XOR、NOt

3.3、关系运算符

说明
EQ相等
NE不等
LT小于
GT大于
LE小于等于
GE大于等于

3.4、分析算符

说明
SEG取标号所代表的地址的段地址
OFFSET取标号所代表的地址的偏移量
TYPE取标号所代表的内存单元的类型值
SIZE取变量分配的内存单元的字节数
LENGTH取变量分配的内存单元数(若定义的字节类型的数据则为几个字节;若定义的子类型的数据则为几个数据)

3.5、组合算符

说明格式
PTR用来建立或临时改变存储器操作数的类型NEWT PTR 标号或存储单元
THIS通常与EQU伪指令连用,用来定义新的标号,其段基址和偏移量和紧跟其后的标号相同THIS 类型 eg. A2 EQU THIS BYTE B1 DW 3421H

3.6、字节分离算符

用于将一个表达式的高字节和低字节分开

LOW 取低字节

HIGH 取高字节

4、伪指令

4.1、符号定义伪指令

给自定义符号定义一个数值或定义为其他符号名

等价伪指令EQU:

格式: 标识符 EQU 表达式(机器指令助记符、为指令助记符、寄存器名称、各种运算符号、常数)

等号伪指令=:

格式: 标识符 = 表达式(表达式、常数)

区别:

1、=伪指令只能代表表达式或常数,不能是指令助记符

2、EQU定义的标识符不能重定义,而=定义的可以

4.2、数据定义伪指令

说明
DB字节,8位
DW字,16位
DD双字,32位
DQ
DT

格式: 标号 DB/DW/DD/DQ/DT 表达式

DUP 复制操作符:

格式:个数 DUP(预置的值)

在汇编语言的指令语句中适用标号是,必须与其类型相匹配

4.3、段定义伪指令

说明
SEGMENT段首说明伪指令
ENDS段结束伪指令
ASSUME段假定伪指令
ORG代码定位伪指令

4.4、其他伪指令

说明格式
EVEN使位置计数器定位在偶地址单元
.RADIX改变默认进制
NAME为程序模块命名
END源程序结束END [ 标号 ]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黑夜蔓蔓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值