8086汇编语言:8086CPU寄存器的相关介绍
一、基本知识:
对于一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件;程序员通过改变各种寄存器中的内容来实现对于CPU的控制。对于不同的CPU,寄存器个数、结构是不相同的。
8086CPU中有14个寄存器,每个寄存器都有一个对应的名称:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
8086CPU中所有的寄存器都是16位的,可以存放两个字节。
但是只有AX、BX、CX、DX这4个寄存器可以分为两个可独立使用的8位寄存器来使用;其他寄存器都不行!
二、通用寄存器:
数据寄存器:(AX、BX、CX、DX)
基本介绍:
AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据。
因为8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使得原来基于上代CPU编写的程序稍加修改就可以在8086CPU上运行,故8086CPU的 AX、BX、CX、DX这4个寄存器都可以分为两个可独立使用的8位寄存器来使用。(注意:但是仅仅限于这四个寄存器,其他的寄存器都不能分成高低8位来使用。)
(以寄存器AX为例)AX的低八位构成了AL寄存器,高八位构成了AH寄存器;这两个寄存器都是可以分别独立使用的8位寄存器。
关于使用的一点注意:(以寄存器AX为例,其他数据寄存器也一样!)
mov ah,0
mov al,200
add al,60
200+60=260;但是因为al是一个8位的寄存器,所以它会发生溢出,所以在运算之后在al中实际存储的值是260-256=4;那么问题来了,溢出的那一位是否会存储在ah中呢?使用代码验证一下!
检验代码:
DATAS SEGMENT;此处输入数据段代码
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码mov ah,0mov al,200add al,60mov dl,ahadd dl,48mov ah,2int 21h MOV AH,4CHINT 21H
CODES ENDSEND START
通过运行结果,我们可以发现那溢出的一位并没有存储在寄存器ah中,因此我们可以得出结论——单独使用寄存器al和寄存器ah时;他们均是作为一个8位独立的寄存器来使用的;彼此互不干扰。
但是当使用ax时就不一样了!
DATAS SEGMENT;此处输入数据段代码
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码mov ax,200add ax,60mov bx,axcall outputMOV AH,4CHINT 21H;多位输出函数,入口参数为bx
output procpush ax;数据入栈区push cxpush dx;初始化变量mov ax,bx;数据放入准备除法mov cl,10;作为除数mov ch,0;用于计数便于后续出栈输出divagain:;除法数字剥离部分cmp ax,0;判断是否已经除尽je divoverinc ch;计数器加1div clpush ax;入栈,提取的时候取用ah部分,存储余数(低位优先)mov ah,0;调整axjmp divagain;再次除法剥离数字divover:;出栈输出部分cmp ch,0;判断数字是否已经出尽je outputoverpop ax;取用ah部分mov dl,ah;输出部分add dl,48mov ah,2int 21hdec chjmp divover outputover:;收尾部分pop dxpop cxpop ax;数据出栈区ret
output endpCODES ENDSEND START
因此我们可以知道使用ax寄存器时,al寄存器和ah寄存器是作为一个整体,彼此不再独立使用!
如果对于图中的多位输出函数——output不太理解的话;可以看我的往期内容,点击下方链接直达!
8086汇编语言:多位数据进行输出(
8086汇编语言:8086CPU寄存器的相关介绍相关推荐
- 汇编语言8086CPU之寄存器总结
寄存器是什么呢? 其实很简单,寄存器就是个存储信息的单元或者说是器件又或者说是容器而已,就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多,只不过寄存器(这里讨论的寄存 ...
- [汇编语言]标志寄存器
目录 一.ZF标志 二.PF标志 三.SF标志 四.CF标志 五.OF标志 六.adc指令 七.sbb指令 八.cmp指令 九.检测比较结果的条件转移指令 十.DF标志和串传送指令 十一.pushf和 ...
- FPGA之道(66)代码中的约束信息(三)存储器以及寄存器的相关约束
文章目录 前言 存储器的相关约束 ram_extract ram_style rom_extract rom_style 寄存器的相关约束 前言 这是这个话题的第三篇,最重要的前言是本文节选自:< ...
- 昇腾Ascend处理器相关介绍
一.参考资料 modelzoo wiki 解密昇腾AI处理器–Ascend310简介 AI芯片:华为Ascend(昇腾)910结构分析 解密昇腾AI处理器–DaVinci架构(计算单元) 二.相关介绍 ...
- Linux(一)之相关介绍与安装
一.Linux相关介绍 1.计算机资源 计算机之前分类:大型机 中型机 小型机 微型机(微机) 计算机资源:冯.诺依曼 硬件资源 内设设备 cpu 主板 内存 硬盘 网卡 声卡 外设设备 鼠标 画图板 ...
- 8086/8088 CPU寄存器组
作者:黑剑 出处:http://www.cnblogs.com/blacksword/ 8086/8088 CPU寄存器组 今天来回顾一下8086/8088 CPU寄存器组的知识.其实8086汇编还 ...
- 基于FPGA的SRIO的相关介绍和实现
SRIO的相关介绍和实现 1.SRIO简介 SRIO是面向嵌入式系统开发提出的高可靠.高性能.基于包交换的新一代高速互联技术,已于2004年被国际标准化组织(ISO)和国际电工协会(IEC)批准为IS ...
- pthread相关介绍
pthread相关介绍 int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void*(*start_routine)(voi ...
- axios队列 vue_(十三 )Vue 封装axios(四种请求)及相关介绍
Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...
- python映射类型-python映射类型的相关介绍
映射类型是一类可迭代的键-值数据项的组合,提供了存取数据项及其键和值的方法,在python3中,支持两种无序的映射类型:内置的dict和标准库中的collections.defaultdict类型. ...
最新文章
- 多线程:pthread_cond_wait 实现原理
- 很蛋疼的ORA-00911:无效的字符错误
- Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)
- Linux下安装Jboss
- 阿里巴巴在应用性能测试场景设计和实现上的实践
- LPWA技术:发展物联网的最佳选择
- spark sql uv_使用Spark Streaming SQL进行PV/UV统计
- 最“好”的编程语言 PHP 真的无药可救了吗?
- 二分专题(不定期更新)
- 《初级会计电算化实用教程(金蝶KIS专业版)》一1.5 课后习题
- c语言知识点总结大全(史上最全)
- 中国股市的发展进程,审核制到注册制利国利民
- 详解Nginx Rewrite标记last和break的区别
- 三维光学测量技术在汽车设计及零部件制造过程中的应用
- 【ESP32】 esp32 输入输出文件系统、编码
- 腾讯地图产业版 WeMap 官网正式发布
- 计算机各类会议及投稿文章总结,个人感觉入门超级有用!
- 西门子1200PLC与V90伺服驱动器 TO控制模式(即工艺对象的方式))
- Linux 学习之创建、删除文件和文件夹命令
- 智能血糖仪行业调研报告 - 市场现状分析与发展前景预测