CS萌新的汇编学习之路02 Learning of Assembly Language
第二节课 寄存器
1. 寄存器的定义: 进行信息储存的器件,是CPU中程序员可以读写的部件,通过改变各种寄存器中的内容来实现对CPU的控制
2. 寄存器的种类: 本节课学习通用寄存器和段寄存器
2.1 通用寄存器
8086CPU中,所有的寄存器都是16位的,可以存放两个字节。AX,BX,CX,DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器。
8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,AX,BX,CX,DX这四个寄存器都可以分为两个8位的小寄存器来用。8086CPU可以一次性处理字节和字,字节(byte)是8个bit组成;字(word)是由两个字节组成(高位字节和低位字节)
例如,AX分为AH和AL (高位和低位)AH为高8位,从00H到FFH,AL为低8位,从00H到FFH。两个按照AX=AH*100H+AL组合在一起。但是在对于AL、AH的单独运算中,产生进位是不予考虑的,比如单独对AL做加法,产生的进位不会加到AH里面,AH的进位也不予添加(超出AX范围了)。但是对于AX的计算考虑在AX范围内的进位,超出AX范围不考虑(直接舍去)。
2.2 物理地址和计算物理地址的方法
CPU访问内存单元,需要给出内存单元的地址,这个唯一的地址为物理地址。
8086CPU为16位结构的CPU机,意味着运算器一次性最多能处理16位的数据,寄存器的最大宽度为16,寄存器于运算器之间的通路为16位,但是8086CPU地址总线为20 位,达到1M的寻址能力,所以内部采用两个16位地址合成的方法来形成物理地址。
CPU中的相关部件提供段地址和偏移地址,段地址和偏移地址通过地址加法器进行 物理地址=段地址*10H+偏移地址 的合成方法产生物理地址,通过内部总线将20位物理地址送入输入输出控制电路,再将物理地址送入地址总线,被传送到储存器。
由于段地址是16进制的,故而只要左移一位加上偏移地址即可。
2.3 内存分段化和段寄存器
将内存分段操作,要找的物理地址在段中,以段起始地址/10H为段地址,由于16位地址的寻址能力为64KB,段的大小在64KB(10000H B)内。因此偏移地址为0~FFFFH之间
例如:有一个数据存放在内存20000H单元中,现在给定段地址为SA,若想用偏移地址选找到此单元,则SA应满足的条件为:最小为1001H,最大为2000H。 解析:由于偏移地址为0~FFFFH之间,故而最大值为(2000H*10H-0H)/10H=2000H;而最小值为(2000H*10H-FFFFH)/10H,但是由于2000H*10H-FFFFH=10001H不为10H的整数倍,所以取进一位的10010H,故而最小值为 10010H/10H=1001H
段寄存器就是存放段地址的寄存器,8086包括4个:CS,DS,SS,ES
CS和IP寄存器:CS为代码段寄存器,IP为指令指针寄存器。 8086CPU从以 CS*10H+IP 为地址的内存单元开始当作指令执行(即把CS:IP的指向的内容当作指令)。每次读取一个指令,IP自动加上指令的字数(代码段的长度)作为读取下一个指令的首地址。
可以修改CS,IP的指令,例如:
jmp 2AE3:3 执行后,CS=2AE3H,IP=0003H
jmp ax 执行后,IP会替换成ax储存的内容
注意!8086CPU加电启动或者复位后(即CPU刚开始工作时),CS和IP被设置为(FFFFH:0000H)所以,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。而且,CPU把CS:IP指向的内存单元内容看作指令。如果内存中的一段信息被CPU执行过的话,它所在的内存单元必定被CS:IP指向过。任意时刻,8086CPU将CS:IP指向的内容当作指令执行。
几个简单的汇编指令:
mov ax,4e20h 把4e20h加到ax中
sub ax,4e20h 把ax中的数据减去4e20h
mov ax,bx 把ax中的数减去bx中的数,并且储存在ax中
CS萌新的汇编学习之路02 Learning of Assembly Language的更多相关文章
- CS萌新的汇编学习之路(其实是老师作业呵呵哒)Learning of Assembly Language
第一节课学习汇编语言,做笔记,做笔记 1.概念 首先是汇编语言这门课程的定义以及对于学习高级语言.深入理解计算机系统的作用 软硬件接口机器语言 汇编语言 高级语言 关系 机器语言和汇编语言可移植性差 ...
- 大数据萌新的Python学习之路(一)
笔记开始简介 从2018年9月份正式进入大学的时代,大数据和人工智能的崛起让我选择了计算机专业学习数据科学与大数据技术专业,接触的第一门语言就是C语言,后来因为同学推荐的原因进入了学校的人工智能研究协 ...
- 大数据萌新的Python学习之路(三)
笔记内容: 一.集合及其运算 在之列表中我们可以存储数据,并且对数据进行各种各样的操作.但是如果我们想要对数据进行去重时是十分麻烦的,需要使用循环,要建立新的列表,还要 进行对比,十分的麻烦,还消耗 ...
- 大数据萌新的Python学习之路(二)
笔记内容: 一.模块 Python越来越被广大程序员使用,越来越火爆的原因是因为Python有非常丰富和强大标准库和第三方库,几乎可以实现你所想要实现的任何功能,并且都有相应的Python库支持,比如 ...
- Spring Boot的学习之路(02):和你一起阅读Spring Boot官网
官网是我们学习的第一手资料,我们不能忽视它.却往往因为是英文版的,我们选择了逃避它,打开了又关闭. 我们平常开发学习中,很少去官网上看.也许学完以后,我们连官网长什么样子,都不是很清楚.所以,我们在开 ...
- ReactNative新手学习之路02第一个RN项目
开始第一个RN项目(iOS版)我的电影列表0.1版,后面做列表版 打开上一节项目 index.ios.js,android打开index.android.js.我这里使用的是Atom编辑器,你也可以使 ...
- Quartz.Net 学习之路02 初探Quartz.Net
第二讲:简单的实例,看看Quartz.Net强在哪里? 直接上代码,代码里有注释: using System; using Quartz; using Quartz.Impl; namespace L ...
- python学习之路02
1.python的数据类型有:Number String List Truple Sets Dictionary . 数字类型:int float bool complex 2.不可变数据:数字 字符 ...
- Django学习之路02
静态文件配置 html文件默认全都放在templates文件夹下 对于前段已经写好了的文件, 我们只是拿过来使用 那么这些文件都可以称之为叫"静态文件"静态文件可以是 bootst ...
随机推荐
- OO第四次作业总结
一:测试与正确性论证的效果差异 首先,测试和正确性论证都是对程序的可靠与否,是否有误进行测试,从整体上来看,测试多偏向于实践,而正确性论证则大多偏向于理论. 测试:测试首先是构造一组测试样例,之后将程 ...
- Java小目标
看了智联.内推和拉勾这三个招聘网站,除了智联外,其它招聘网站对岗位要求的描述都比较专业.大部分公司都要求会一些HTML5.JS,SSH等前端技术,所有公司都要求会使用Oracle.MySQL等数据库, ...
- 用Git将本地项目推送到github
[博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] http ...
- Python 12306登陆详细分析及操作
前面的话: 1.第一次尝试爬虫,登陆12306,有不足的地方,望大家留言告知,谢谢. 2.前面引入了一个requests模块,我不多说,大家都知道干啥的.还有config是我的一个配置文件,因为其中涉 ...
- WPF实现按钮鼠标停留样式的一个坑
弄了个按钮鼠标停留样式,发现把它应用到某些窗体的Button上会发生样式模糊的问题,而其它窗体又不会. 百思不得其解,真是活久见. 后来发现是跟包着Button的容器控件有关,只要是那些会自适应的容器 ...
- Struts2中Action之ResultType
我们在struts-defalut.xml文件中可以看到如下图所示: 这些类型是配置文件所带的.接下来我们主要讲解我标注出来的这个,其他的我就不做详解了,有兴趣的可以去试试. web.xml文件我在这 ...
- c++中sort()函数的用法
用法: 1.sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std; 2.它使用的排序方法是类似于快排的方法 ...
- python之99乘法表
#99乘法表 fir=1 while fir<=9: sec=1 while sec<=fir: print(str(fir)+'*'+str(sec)+'='+str(fir*sec)) ...
- Scrapy创建项目问题
创建项目时报错 ModuleNotFoundError: No module named 'cryptography.hazmat.bindings._constant_time' pip insta ...
- C# 检查数字
#region 检查数字 public bool IsNumeric(string value) { bool result; try { int x = int.Parse(value); resu ...