汇编语言第二章知识梳理及思考

第二章 寄存器(CPU工作原理)

CPU概述

     CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

     内部总线实现CPU内部各个器件之间的联系。

     外部总线实现CPU和主板上其他器件的联系。

 

寄存器概述

     8086CPU有14个寄存器:

AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

 

2.1通用寄存器

     8086CPU所有的寄存器都是16位的,可以存放两个字节。

     通用寄存器:AX、BX、CX、DX通常用来存放一般性数据。

    

以AX为例,寄存器的逻辑结构:

         15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

         16位数据在寄存器中的存放情况

              数据:18

              二进制表示:10010

              在寄存器AX中的存储:

              15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0(AX)

0       0  0  0  0  0 0 0 0 0 0 1 0 0 1 0

一个16位的寄存器所能存储的数据的最大值为2^16-1

一个8位的寄存器所能存储的数据的最大值为2^8-1

 

为了保证兼容性,四个通用寄存器都可以分为两个独立的8位寄存器使用。

     AX=AH(高8位(8~15位))+AL(低8位(0~7位));

     BX=BH+BL;

     CX=CH+CL;

     DX=DH+DL;

    

2.2字在寄存器中的存储

一个字可存放在一个十六位的寄存器中,这个寄存器的高位字节和低位字节就存在这个寄存器的高八位寄存器和第八位寄存器中。

 

【关于数制的讨论】P16

2.3几条汇编指令(汇编指令不区分大小写)

123456789ABCDEFG

MOV AX,BX

add ax,bx

 

2.4物理地址

物理地址:CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。

 

2.5 16位结构的CPU

16位结构描述了一个CPU具有以下几个方面的特征:

1,      运算器一次最多可以处理16位的数据;

2,      寄存器的最大宽度为16位;

3,      寄存器和运算器之间的通路是16位的;

 

2.6 8086CPU给出物理地址的方法

8086内部有20位地址总线,可传送20位地址,寻址能力为1M(2^20=1MB)。8086内部为16位结构,他只能传送16位的地址,表现出的寻址能力为64K。8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

 

8086CPU读写内存:

1,      CPU中的相关部件提供两个十六位地址,一个称为段地址,另一个称为偏移地址;

2,      段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

3,      地址加法器将两个16位地址合并成一个20 位的地址;

4,      再通过20位地址总线传送到存储器中。

 

2.7 “物理地址=段地址*16+偏移地址”的本质含义

地址加法器合成物理地址的方法:物理地址=段地址*16+偏移地址;

段地址*16——》左移四位(二进制)

一个数据的X进制形式左移一位,相当于乘以X

 

2.8 段的概念

段的划分来自于CPU,由于8086CPU采用(物理地址=段地址*16+偏移地址)的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

注意:1,段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;

2,偏移地址为16位,16位地址的寻址能力为64K,所以一个段的最大长度为64K;

 

小结:

CPU访问内存单元时,必须向内存提供内存单元的物理地址。

8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。

 

思考:

CPU可以用不同的段地址和偏移地址形成同一个物理地址。

偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可以寻64K个内存单元。

 

“数据在21F60H内存单元中”8086CPU机的两种描述:

1. 数据存在内存2000:1F60单元中;

2. 数据存在内存的2000段中的1F60H单元中;

 

2.9段寄存器

段寄存器就是提供段地址的,8086CPU有4个段寄存器:

CS、DS、SS、ES。当8086要访问内存时,由这4个段寄存器提供内存单元的段地址。

2.10CS和IP

CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器IP为指令指针寄存器。

 

2.11修改CS,IP的指令

转移指令:

     同时修改CS,IP的内容:

     Jmp 段地址:偏移地址

         Jmp 2AE3:3

         Jmp 3:0B16

功能:用指令中给出的段地址修改CS,偏移地址修改IP。

     修改IP的内容:

     Jmp 某一合法寄存器

         Jmp ax (类似于mov IP,ax)

         Jmp bx

功能:用寄存器中的值修改IP。

 

2.12代码段

    

2.9-2.12小结:
1.段地址在8086CPU的寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8686CPU有4个段寄存器,其中CS用来存放指令的段地址。

2.CS存放指令的段地址,IP存放指令的偏移地址。

8086机中。任意时刻,CPU将CS:IP指向的内容当作指令执行。

3.8086 CPU在工作的过程中:

(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;

(2)IP指向下一条指令;

(3)执行指令(跳转到(1),重复这一过程。)

4.8086 CPU提供转移指令修改CS,IP的内容。

转载于:https://www.cnblogs.com/GloriousABC/p/9866128.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新

Vue面试题 生命周期函数面试题 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created和mounted的区别 6.vue获取数据在哪个周期函数 7.请详细说下你对vue生命周期的理解&…

Neural Networks and Deep Learning 读书笔记

1 转载于:https://www.cnblogs.com/jellyj/p/9867103.html

JS中的数据类型转换:String转换成Number的3种方法

今天有个学员问了个关于数据类型转换的问题,我觉得这个是可以给大家说一下的。 JavaScript中,可以通过以下3种方法来将string值转换成number: 1.调用Number()来对string进行值类型转换。 2.parseInt()。 3.parseFloat()。 Number() 使用…

Java学习——使用Static修饰符

程序功能:通过两个类 StaticDemo、LX4_1 说明静态变量/方法与实例变量/方法的区别。 package Pack1;public class Try {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("静态变量x"StaticDemo.getX());非…

JavaScript从入门到精通之入门篇(一)概念与语法

入门篇大纲 第一部分 概念与语法 1.JavaScript的历史 2.基本概念 3.JavaScript的使用、调试和异常处理 4.基本词法和变量 5.数据类型和类型转换 6.运算符 算数运算符 赋值运算符 一元运算符 使用一元运算符,将会把所有的内容转换为数值运算,不…

【小记】-005--纯CSS实现的小玩意儿

效果图奉上 代码奉上 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&q…

JavaScript从入门到精通之入门篇(二)函数和数组

入门篇大纲 第二部分 函数与数组 1.函数 函数的定义 普通函数 function 函数名 &#xff08;表达式1…&#xff09; { 代码块 }js是解释性语言&#xff0c;在当前script标签代码执行的开始阶段&#xff0c;就会将普通函数放入堆中&#xff0c;也只是将引用放入堆中&#xf…

leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String

557. Reverse Words in a String III 最简单的把空白之间的词反转 class Solution { public:string reverseWords(string s) {vector<int> blank;for(int i 0;i < s.size();i){if(s[i] )blank.push_back(i);}int start 0;int end;for(int i 0;i < blank.size(…

elementUI vue table status的状态列颜色变化和操作列状态显示(停用, 启用)

<div id"app" style"display: none">...<el-table-column prop"status" label"状态" width"80" align"center"><template scope"scope"><span v-if"scope.row.status0"…

一道Python面试题

无意间&#xff0c;看到这么一道Python面试题&#xff1a;以下代码将输出什么&#xff1f; def testFun(): temp [lambda x : i*x for i in range(4)] return temp for everyLambda in testFun(): print (everyLambda(2))脑中默默一想&#xff0c;这还用说么&#xff0c;肯定是…

Windows下的ssh姐妹花 Xshell 和 Xftp

Windows下的ssh姐妹花 Xshell 和 Xftp 今天是3月8号&#xff0c;中国传统的三八妇女节&#xff0c;是距离中国新兴节日三七女生&#xff08;神&#xff09;节最近的一个全国性节日&#xff0c;今天我也是宅在家&#xff0c;研究了一下近日工作上遇到的一个纯软件技术问题。废话…

关于数字证书理解的简单整理以及12306站点证书简单分析

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/sundacheng1989/article/details/25540601 首先简单理解一下什么是数字证书。这里是一篇英文文档&#xff0c;描写叙述的非常形象。形象的描写叙述了什么是公钥。什么是私钥。…

Luogu3350 ZJOI2016 旅行者 最短路、分治

传送门 题意&#xff1a;给出一个$N \times M$的网格图&#xff0c;边有边权&#xff0c;$Q$组询问&#xff0c;每组询问$(x_1,y_1)$到$(x_2,y_2)$的最短路。$N \times M \leq 2 \times 10^4 , Q \leq 10^5$ BZOJ原题竟然没有数据范围 矩形的多组询问问题考虑分治。考虑计算矩形…

Mac中安装Node和版本控制工具nvm遇到的坑

首先说说常规的安装 1. 下载nvm,使用nvm来管理Node版本 官方文档 windows 版本  https://github.com/coreybutler/nvm-windows mac 版本    https://github.com/creationix/nvm#install-script 命令行 尽量不要用brew&#xff0c;免得掉坑 curl -o- https://raw.githubu…

几道比较有意思的js面试题

1、[] ? !![] : ![];输出结果是什么&#xff1f; 12345let val [] ? !![] : ![];console.log(val); //true&#xff1a;//之前的错误解释&#xff1a;[] 是一个null&#xff0c;做判断则为false&#xff0c;false执行![]语句&#xff0c;结果为非空&#xff0c;即true//更正…

wepy - 与原生有什么不同(x.wpy)使用实例

源码 1 <template>2 <view classmark wx:if"{{showMark}}">3 <view animation"{{animationData}}" class"animCat">4 <image src"http://osk1hpe2y.bkt.clouddn.com/18-5-30/34559443.jpg"></…

vue从入门到精通之高级篇(一)vue-router的高级用法

今天要介绍的是路由元信息&#xff0c;滚动行为以及路由懒加载这几个的使用方法。 1.路由元信息 什么是路由元信息&#xff0c;看看官网的解释&#xff0c;定义路由的时候可以配置 meta 字段可以匹配meta字段&#xff0c;那么我们该如何使用它&#xff0c;一个简单的例子&…

Java 数组实现堆栈操作

class Stack {private int stck[] ; private int tos ; Stack(int size) { // 一个参数的构造参数stck new int[size] ; // 创建数组&#xff08;创建堆栈&#xff09;tos -1 ; // 空堆栈标识 -1}// 堆栈操作的特性&#xff1a;先进后出、后进先出void push(int…

re模块

什么是正则表达式 一组特殊符号组成的表达式&#xff0c;用于描述某种规则。该应用场景生活中随处可见。 例如&#xff1a;让有志青年过上体面的生活&#xff0c;这里面就由规则&#xff0c;即有志青年。 正则表达式的作用&#xff0c;以及使用场景 用于从字符串中匹配满足某种…

CSS实现div梯形分割

原理 使用的border边框属性结合svg 转换 详见代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css实现div边框斜角</title><style type"text/css"> .labels {display: i…