在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【RT-Thread學習筆記】80x86匯編基礎的三大塊知識

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-07-30 10:57 ? 次閱讀

1 前言

搞計算機的肯定聽說過80x86,至少你的匯編基礎課程肯定是基于80X86系統來學習的。

x86或80x86是英特爾Intel首先開發制造的一種微處理器體系結構的泛稱。該系列較早期的處理器名稱是以數字來表示,并以“86”作為結尾,包括Intel 8086、80186、80286、80386以及80486,因此其架構被稱為“x86”。由于數字并不能作為注冊商標,因此Intel及其競爭者均在新一代處理器使用可注冊的名稱,如Pentium。現時Intel把x86-32稱為IA-32,全名為“Intel Architecture, 32-bit”。

“X86”是Intel和其他幾家公司處理器所支持的一組機器指令集,它大致確定了芯片的使用規范。從8086到80186、80286、80386、80486,再到后來的奔騰系列以及現在的多核技術,都是使用一脈相承的x86指令集,既不斷擴展又向后兼容。

更多介紹,請參考百度百科。

2 80x86知識圖譜

本文先列個大綱,后續有時間再補充。

image-20220130234307648

3 80x86匯編基礎三大塊

這里整理了80x86匯編中非常基礎的三大塊知識,了解了這三大塊內容基本可以看懂甚至編譯一些簡單的匯編程序。

3.1 尋址方式

80x86的尋址方式就是表示指令中數據所在地址的方式。一共有七種尋址方案:立即數尋址、寄存器尋址、直接尋址、寄存器直接尋址、寄存器相對選址、基址變質尋址、相對基址變質尋址。

3.1.1 立即數尋址 / 寄存器尋址

? MOV AX, 1; AX = 1

? 立即數尋址,我覺得稱不上尋址,因為他給出的不是地址,而就是實際的數字,上面的命令中 1 就是立即數,而AX就是寄存器尋址所以寄存器尋址就是直接使用寄存器,數據直接存入指定的寄存器

? 寄存器尋址可以使用的寄存器是AX(AL AH) BX(BL BH) CX(CL CH) DX(DL DH) SI DI SP BP等, 這些寄存器可以任意組合,舉例如下

MOV AX, BX; AX = BX

MOV BX, AX; BX =AX

MOV SI, DI; SI = DI

MOV DI, SI; DI = SI

? 這兩種尋址方式是不涉及內存的操作的,所以速度是最快的,所以為了性能考慮應該盡量多的使用這兩種尋址方式的操作。

注意: MOV 1, AX 是非法的,應為1就是常數,你不能給常數賦值

3.1.2 直接尋址

MOV AX, [1234H]

MOV AX, ES:[1234H]

直接尋址就是直接給出內存地址的尋址方式,格式是 段寄存器:[偏移地址] 偏移地址是立即數,用[]括起來。當然也可以直接省去前面的段寄存器寫作 [偏移地址],這樣匯編會自動選擇一個默認的段地址,一般來說是DS段寄存器前面講過內存地址是 段地址X16+偏移地址,所以使用段寄存器:[偏移地址] 給出的地址就是 段寄存器的值X16 + 偏移地址,

舉例

MOV AX, DS:[1234H]

這句話的就是將DSx16+1234H處的數據復制給AX寄存器,假設DS=5000H 那么就是將內存51234處的數據復制給AX,具體是多少就要看當時內存中是什么數據了。

MOV AX, ES:[1234H]

就是顯示指定了使用的ES段寄存器,所以就是將ESx16+1234H處的數據復制給AX

注意 ":"前面只能跟著段寄存器 DS ES SS CS寄存器

這一條尋址方式其實是最基礎的尋址方式,接下來的其他幾種尋址方式都是只是[]偏移地址的表示方式發生了一些變化而已。

3.1.3 寄存器直接尋址 / 基址尋址

MOV AX, [BX]

MOV AX,CS:[BX]

本質上和直接尋址是沒太大區別的,唯一的區別就是在直接尋之中[]中的數據是直接給出的,但是在寄存器間接尋址中這個數字是存儲在寄存器中而已。

這里有個限制就是[] 中能使用的寄存器只有 BX BP SI DI ,如果使用的是BX SI DI則默認的段寄存器是DS,如果是BP寄存器則默認使用SS寄存器。

當然如果特意指定寄存器那么就用指定的寄存器。

舉例 AX =1 BX = 1111H DS = 5000H

MOV AX, [BX] ; 等于MOV AX,DS:[1111H] 就是將51111H內存出的數據復制到AX

3.1.4 寄存器相對尋址 / 相對基址尋址

MOV AX, [BX + 1111H]

在寄存器直接尋址的基礎上加上立即數,其他規則還是和寄存器直接尋址一樣的

舉例 AX =1 BX = 2222H DS=5000H

MOV AX, [BX + 1111H] ; 等于 MOV AX, DS:[2222H + 1111H] => MOV AX, DS:[3333H]

### 3.1.5 基址變址尋址

MOV AX,[BX+SI]

基址變址尋址就是用了兩個寄存器 {BX/BP}+{SI/DI}, 如果是出現BP寄存器則默認使用SS寄存器,否則默認使用DS寄存器.規則和寄存器間接尋址也是一樣的。

要注意的是這里分為兩組了寄存器 BX/BPSI/DI,一組中只能出現一個,即不能出現[ BX+BP ][SI+DI],從名字中就可以看出的 基址+變址,

BX 基地址寄存器

BP 基址指針寄存器(Base Point)

SI 源地址寄存器(Source Index)

DI 目的地址寄存器(Destination Index)

舉例 AX =1 BX=1111H SI=2222H DS= 5000H

MOV AX,[BX+SI]; 等于 MOV AX, DS:[BX+SI] => MOV AX, DS:[1111H+2222H] => MOV AX, DS:[3333H]

### 3.1.6 相對基址變址尋址

MOV AX,[BX+SI+4444H]

可以看出就是在基址變址尋址的基礎上加上了立即數其他規則不變

舉例 AX =1 BX=1111H SI=2222H DS= 5000H

MOV AX,[BX+SI+4444H]; 等于 MOV AX, DS:[BX+SI+4444H] => MOV AX, DS:[1111H+2222H+4444H] => MOV AX, DS:[7777H]

3.2 寄存器的用途

80x86 CPU 中寄存器總共為 14 個,且均為 16 位 。

AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 個。

而這 14 個寄存器按照一定方式又分為了通用寄存器,控制寄存器和段寄存器。

image-20220130235215566

3.2.1 通用寄存器:

AX,BX,CX,DX 稱作為數據寄存器:

AX (Accumulator):累加寄存器,也稱之為累加器;

BX (Base):基地址寄存器;

CX (Count):計數器寄存器;

DX (Data):數據寄存器;

SP 和 BP 又稱作為指針寄存器:

SP (Stack Pointer):堆棧指針寄存器;

BP (Base Pointer):基指針寄存器;

SI 和 DI 又稱作為變址寄存器:

SI (Source Index):源變址寄存器;

DI (Destination Index):目的變址寄存器;

3.2.2 控制寄存器:

IP (Instruction Pointer):指令指針寄存器;

FLAG:標志寄存器;

3.2.3 段寄存器:

CS (Code Segment):代碼段寄存器;

DS (Data Segment):數據段寄存器;

SS (Stack Segment):堆棧段寄存器;

ES (Extra Segment):附加段寄存器;

3.3 匯編指令

由于80x86的指令非常多,本文僅列舉常見的一些匯編指令,更多的指令格式,請參考其他資料。

從功能分類上來說,一共可分為

  • 數據傳送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。
  • 算術指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。
  • 邏輯指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。
  • 控制轉移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。
  • 串操作指令:MOVS、LODS、STOS、CMPS、SCAS。
  • 標志處理指令:CLC、STC、CLD、STD。

4 更多分享

歡迎關注我的github倉庫01workstation,日常分享一些開發筆記和項目實戰,歡迎指正問題。

同時也非常歡迎關注我的專欄:有問題的話,可以跟我討論,知無不答,謝謝大家。

5 參考鏈接

  • 80x86尋址方式
  • 80x86寄存器
  • 80x86指令

以上參考資料,由本人整理,但來源于網絡,侵刪!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 匯編
    +關注

    關注

    2

    文章

    214

    瀏覽量

    26436
  • RT-Thread
    +關注

    關注

    32

    文章

    1372

    瀏覽量

    41544
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

    全球開發者招募:RT-Thread審核團(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質量、促進技術交流的關鍵環節。RT-Thread作為全球領先
    的頭像 發表于 05-21 18:02 ?496次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區治理與演進

    如何將RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默認支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
    的頭像 發表于 02-13 10:37 ?1761次閱讀
    如何將<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上

    從開源中來到開源中去-RT-Thread北京社區篇

    社區!北京社區已成功舉辦次線下月度例會以及1次線下見面會,11月份例會將在本周六進行,歡迎RT-Thread北京的開發者積極參與。掃碼進入北京社區群11月份例會
    的頭像 發表于 11-29 01:05 ?411次閱讀
    從開源中來到開源中去-<b class='flag-5'>RT-Thread</b>北京社區篇

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅動移植,并正常啟動RT-T
    的頭像 發表于 11-13 01:03 ?1926次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    【S32K146 RT-thread】之 SPI驅動適配

    概述RT-Thread對SPI總線的驅動,抽象出了spibus的設備驅動,我們基于S32K146的硬件學習spibus設備驅動。
    的頭像 發表于 11-01 08:11 ?1202次閱讀
    【S32K146 <b class='flag-5'>RT-thread</b>】之 SPI驅動適配

    開源共生 商業共贏 | RT-Thread 2024開發者大會報名啟動!

    親愛的RT-Thread開發者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發者大會)正式啟動報名!2024RT-Threa
    的頭像 發表于 10-29 08:06 ?874次閱讀
    開源共生 商業共贏 | <b class='flag-5'>RT-Thread</b> 2024開發者大會報名啟動!

    Nordic-RT-Thread5.1.0移植筆記

    Nordic-RT-Thread5.1.0移植筆記
    的頭像 發表于 10-16 08:09 ?1149次閱讀
    Nordic-<b class='flag-5'>RT-Thread</b>5.1.0移植<b class='flag-5'>筆記</b>

    【成都】9月21日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區成員們:RT-Thread24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發,以及和工程師們線下交流的絕佳機會
    的頭像 發表于 09-13 08:09 ?1436次閱讀
    【成都】9月21日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    【大連】9月7日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區成員們:2024年RT-Thread全球開發者線下培訓拉開帷幕啦!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入
    的頭像 發表于 09-01 08:02 ?3080次閱讀
    【大連】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    獲獎公布!2024 RT-Thread全球巡回線下培訓火熱來襲!報名提問有獎!

    學習:包括啟動流程、線程、IPC等知識RT-Thread 組件學習學習使用設備驅動、網絡、UI、Arduino等組件 豐富有趣的應用案
    發表于 08-20 14:15

    【QEMU系列】不用開發板運行RT-Thread指南-ARM架構

    成為一個門檻。本文將詳細介紹如何在QEMU虛擬機的Vexpress-A9平臺上運行RT-Thread,幫助開發者在沒有實際硬件開發板的情況下,輕松體驗和學習RT-Th
    的頭像 發表于 08-09 08:35 ?1461次閱讀
    【QEMU系列】不用開發板運行<b class='flag-5'>RT-Thread</b>指南-ARM架構

    2024 RT-Thread全球巡回 線下培訓火熱來襲!

    親愛的RT-Thread社區成員們:我們非常高興地宣布,2024年RT-Thread全球開發者線下培訓即將拉開帷幕!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-T
    的頭像 發表于 08-07 08:35 ?2438次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓火熱來襲!

    【好書推薦】RT-Thread設備驅動開發指南

    近年來國內芯片產業和物聯網產業的快速崛起,行業發展迫切需要更多人才,尤其需要掌握嵌入式操作系統等底層技術的人才。隨著RT-Thread被更廣泛地應用于行業中,開發者對嵌入式驅動開發的需求越來越
    的頭像 發表于 08-01 08:35 ?1179次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設備驅動開發指南

    RT-Thread 新里程碑達成——GitHub Star 破萬!

    RT-Thread實時操作系統開源項目在GitHub上的star數量突破一萬!截止發文,RT-Thread作為實時操作系統在業界Star數量排名第一!倉庫地址:https://github.com
    的頭像 發表于 07-04 08:35 ?715次閱讀
    <b class='flag-5'>RT-Thread</b> 新里程碑達成——GitHub Star 破萬!

    基于 RT-Thread專業版的EtherCAT主站方案

    (一)方案介紹本方案基于RT-Thread專業版,在RT-Thread端集成EtherCAT主站協議,通過EtherCAT對伺服電機或遠程IO進行實時控制,具備傳輸速度快,實時性高,擴展設備靈活等
    的頭像 發表于 06-19 08:35 ?1718次閱讀
    基于 <b class='flag-5'>RT-Thread</b>專業版的EtherCAT主站方案
    主站蜘蛛池模板: 99久久久免费精品免费 | 亚洲三级视频在线观看 | 一区二区免费播放 | 狠狠干成人 | 天天狠天天透天干天天怕处 | www.天天射| 色播六月| 天堂8资源在线官网资源 | 色婷婷视频在线观看 | 狠狠的日视频 | 变态重口极致另类在线 | 天天干天天色天天射 | www.啪啪.com| 明日花绮罗在线观看 | 国模啪啪一区二区三区 | 激激婷婷综合五 | xxxx69日本hd | 久久成人影视 | 午夜三级理论在线观看视频 | 5g影院欧美成人免费 | 免费看啪啪的网站 | 免费视频18 | 成人午夜精品久久久久久久小说 | 亚洲男人的性天堂 | 四虎影院免费观看 | 中文字幕成人乱码在线电影 | 在线观看亚洲一区 | 男生脱美女内裤内衣动态图 | 狠狠色丁香久久综合五月 | 亚洲经典一区二区三区 | 日本69式xxx视频 | 在线免费视频观看 | 欧美亚洲综合一区 | 68日本xxxxxxxxx xx | 精品三级三级三级三级三级 | 一区二区三区高清 | 特级全黄一级毛片视频 | 中文字幕一区二区在线观看 | 午夜性视频播放免费视频 | 18免费视频 | 日本不卡在线观看 |