(二)汇编语言——寄存器
目录
接下来我们来介绍寄存器,同时会介绍一些基本的语句(mov,add等),好了,就让我们进入今天的学习吧!同时,我们以8086为例子来介绍,参考来自王爽老师的书。
说起寄存器,我们可不陌生,在单片机中我们已经接触过了。但是这个地方的寄存器要比单片机中有点不一样,以8086为例子,一共有14个寄存器:
- 通用寄存器:AX、BX、CX、DX;
- 变址寄存器:SI、DI;
- 指针寄存器:SP、BP;
- 指令指针寄存器:IP;
- 段寄存器:CS、SS、DS、ES;
- 标志寄存器:PSW
这些我们在后面都会一一介绍,不过首先,我们来介绍一下通用寄存器。
通用寄存器
8086所有的寄存器都是16位的,所以最大可以存放2^16 - 1,但是目前有个问题,就是8080是8位的,那么两种是否是否是完全不同的两个东西,答案是否定的,这是因为8086的寄存器,分为高位(H)和低位(L),这就相当于两个8位,不得不说,还是满巧妙地,这样也解决了我的疑问,为什么在单片机里面寄存器可以拆开来用。
汇编指令
接下来我们来简单介绍两个汇编指令:mov 和 add,主要就是用来移动数据和加数据。 可以说非常简单了 ,就不再赘述。唯一需要注意的就是,当加法溢出之后,溢出位是直接没有的,比如16位数据相加溢出,17位的1直接消失,而如果是8位,也不会向高位溢出,也是直接舍弃。
就像这里红色圈起来的0058,当执行add al, 93,之后,相当于,c5+93=158,然后1溢出,不会向高位进位。
物理地址
我们知道,8086有20位地址总线,所以寻址能力应该为1M。但是有个问题,就是8086是16位的机器,并不能一次传输20位的数据,这可怎么办呢? 解决办法就是用两个16位寄存器合成20位数据,这样就解决了问题,也就是:物理地址=段地址×16+偏移地址,接下来我们来看一看。 这样,我们表示123C8就可以直接用1230:00C8来表示,当然也可以用其他的,在此不再赘述。
未完待续
相关文章
- 迟来的kafka系列——认识和使用kafka
- kafka系列——kafka原理简介
- jenkins 系列(1)安装与配置
- jenkins系列(2)pipeline
- jenkins 构建触发
- k8s 系列教程-Vagrant
- k8s系列教程-docker基础知识
- k8s系列教程-初识k8s
- VUE 前端文本输出为超文本
- K8s系列-KubeSphere
- k8s系列-helm
- helm 勘误
- 普罗米修斯
- 2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不
- R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数
- R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析|附代码数据
- 【视频】主成分分析PCA降维方法和R语言分析葡萄酒可视化实例|数据分享|附代码数据
- 系列文章| R语言分布滞后线性和非线性模型DLM和DLNM建模应用|附代码数据
- 系列文章| R语言分布滞后线性和非线性模型DLM和DLNM建模应用|附代码数据
- R语言JAGS贝叶斯回归模型分析博士生延期毕业完成论文时间|附代码数据