彙編語言——物理地址=段地址x16+偏移地址,檢測點2.2

来源:https://www.cnblogs.com/yxddj/archive/2019/11/05/11802249.html
-Advertisement-
Play Games

一、為什麼 物理地址=段地址x16+偏移地址? PS:剛開始學時,我都笨到不明白為什麼是2的N次方,咱把物理地址就當數字,電腦中數字是由很多位0或1自由組合的, 而每一位上要麼是0要麼是1,只有這兩種情況,所以N位就可以組成2的N次方個編號地址了 8086CPU的地址匯流排是20條(位),因此就可以 ...


一、為什麼 物理地址=段地址x16+偏移地址?

 

  PS:剛開始學時,我都笨到不明白為什麼是2的N次方,咱把物理地址就當數字,電腦中數字是由很多位0或1自由組合的, 而每一位上要麼是0要麼是1,只有這兩種情況,所以N位就可以組成2的N次方個編號地址了

  8086CPU的地址匯流排是20條(位),因此就可以給104 8576個(1M)記憶體單元進行地址編號,而寄存器和數據匯流排都是16位的,16位對應6 5536(64K),這樣就浪費了好多好多記憶體空間啊,咋辦?於是那些聰明人整了個地址加法器,地址加法器乾的活計就是把16位的段地址乘以16,為啥非得是16呢?我讓你乾件事:你把數字68左移一位是多少,你告訴我680,沒錯,你把68後面補個0 其實就是乘以了10,我再讓你把十六進位38H左移一位你還是像剛纔那麼乾在後面補個0是380H,其實還是乘以了10H, 而這裡的10H對應十進位16,1位十六進位對應4位二進位,所以段地址乘以十進位的16,就是相當於在一個16位的二進位數後面補了4個0,哇這不就湊成了20位,記憶體就避免了浪費,乘完16得到了一個首地址(起始地址/基礎地址),把首地址作為一個起始地址加上一個16位二進位偏移地址,偏移地址的偏移量是0H~FFFFH(因為16位二進位數最大是FFFFH),所以段空間最大是64K(FFFFH),我們以後就可以根據需要邏輯上把記憶體分段進行記憶體空間的訪問。

二、段地址x16是一個16的倍數

一看標題這不廢話嗎。。。直到看到王爽老師《彙編語言》檢測點2.2,加深了對這句話的理解

我們就做最小為多少,根據公式很容易想到,當偏移地址最大為FFFFH時 段地址SA肯定最小啊

①SAx16+FFFFH=20000H

②SAx16=20000H-FFFFH=10001H

③SA=10001H/16(10H)=1000H

這也太簡單了吧,百度下看看答案對不對,納尼答案咋是1001H,哪來的啊?我算錯了???算了好幾次都是1000H啊,咋回事?

  我們註意SAx16=20000H-FFFFH=10001H,我們再看一眼標題二,10001H=65537 顯然不是16的倍數啊,然後我們就把之前用的FFFF換成FFFF-1,FFFF-2,FFFF-3...直到試到FFFF-F=FFF0H時得到了16的倍數和正確答案吻合了。但這樣操作好累啊,一個一個試,所以快速的做法是反過來想:我要保證首地址是一個16的倍數,從十六進位角度看就是要保證末尾是個0,

所以20000H-?=末尾是0的數,顯然FFF後面帶個0就能跟20000H末尾的0對應相減得到末尾是0的數。

  總結:記憶體中有些記憶體單元不能作為段的首地址(段地址x16),因為有些物理地址不是16(10H)的倍數,但是段地址可以是任何地址因為它要乘16,無論地址是多少都可以,註意我這裡說的段地址並不是記憶體中的地址,因為段地址是16位,記憶體的物理地址是20位,前面說的首地址(在偏移為0的情況下)可以看成記憶體中段的起始物理地址,但這不表示那些不能做首地址的記憶體單元訪問不到,因為一個記憶體單元的物理地址可以根據段地址和偏移地址有很多種組合來訪問它。

若有錯誤,請評論指正,謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. python介紹 1.1 python是什麼樣的語言 編程語⾔主要從以下⼏個⻆度為進⾏分類,編譯型和解釋型、靜態語⾔和動態語⾔、強類型定義語⾔和弱類型定義語⾔,我們先看編譯型語⾔和解釋型語⾔.稍後再說強類型和弱類型 編譯和解釋的區別是什麼? 編譯器是把源程式的每⼀條語句都編譯成機器語⾔,並保存 ...
  • 開發環境: Windows操作系統 開發工具:MyEclipse/Eclipse + JDK+ Tomcat + MySQL 資料庫 項目簡介: 系統前段頁面採用jsp + JavaScript + css的組合技術開發,其中JavaScript使用了jQuery和bootstrap框架,這兩個前段 ...
  • 1.緩存雪崩和緩存穿透問題 1.1緩存雪崩 簡介:緩存同一時間大面積的失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。 解決辦法:  事前:儘量保證整個 redis 集群的高可用性,發現機器宕機儘快補上。選擇合適的記憶體淘汰策略。  事中:本地 ehcache 緩存 ...
  • 一、基礎類介紹 1、工作簿類Workbook簡介: import xlwt class Workbook(object0): ''' 工作簿類,使用xlwt創建excel文件時,首先要實例化此類的對象 ''' def __init__(self, encoding='ascii', style_co ...
  • 在項目開發過程中經常遇到時間處理,但是你真的用對了嗎,理解阿裡巴巴開發手冊中禁用static修飾SimpleDateFormat嗎 通過閱讀本篇文章你將瞭解到: 為什麼需要LocalDate、LocalTime、LocalDateTime【java8新提供的類】 java8新的時間API的使用方式, ...
  • 1. 樂觀鎖 樂觀鎖顧名思義就是在操作時很樂觀,認為操作不會產生併發問題(不會有其他線程對數據進行修改),因此不會上鎖。但是在更新時會判斷其他線程在這之前有沒有對數據進行修改,一般會使用版本號機制或CAS(compare and swap)演算法實現。簡單理解:這裡的數據,別想太多,你儘管用,出問題了 ...
  • start方法和run方法比較 很多人包括我自己也以前也認為run和start方法都可以啟動一個線程,並且兩者的功能都差不多,然後在學習的過程中認識到這是錯誤的,他們之間是 截然不同 的。先來看一段演示代碼: 輸出結果: 可以看到, 執行run方法的線程是主線程,而執行start方法的才是一個新的子 ...
  • 獲取 在刷機之前,需要在電腦上下載 Android Preview 包,一般我都是到 安卓中國 ,這裡可以下載最新的包。 手機 相對下載包的獲取,比較難的是有一部支持最新的安卓系統的手機,一般 Preview 版的系統都是預設支持 Google 自己的手機的。 主要有面向的是 Pixel 系列的手機 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...