匯編語言第二章知識梳理及思考

第二章 寄存器(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.pswp.cn/news/249125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249125.shtml
英文地址,請注明出處:http://en.pswp.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…