匯編復(fù)習(xí)-寄存器

加班再晚裸违,該看的匯編還是得看完借帘。if you're struggling,that means you're progressing.看書時不寫廢話


一個典型的CUP是由運算器惜互、控制器布讹、寄存器等器件構(gòu)成,這些器件靠內(nèi)部總線相連训堆。在CUP中:

  • 運算器進行信息處理描验;
  • 寄存器進行信息存儲;
  • 控制器控制各個器件進行工作坑鱼;
  • 內(nèi)部總線連接各種器件膘流,在它們之間進行數(shù)據(jù)的傳送。

8086CPU共有14個寄存器鲁沥,分別是AX呼股、BX、CX黍析、DX卖怜、SI、DI阐枣、SP马靠、BP、IP蔼两、CS甩鳄、SS、DS额划、ES妙啃、PSW。程序員通過改變各種寄存器中的內(nèi)容來實現(xiàn)對CPU的控制俊戳。

通用寄存器(AX揖赴、BX、CX抑胎、DX)

8086CPU的所有寄存器都是16位的燥滑,和數(shù)據(jù)總線一樣同為16位,可以存放兩個字節(jié)AX阿逃、BX铭拧、CX赃蛛、DX用于存放一般的數(shù)據(jù),被稱為通用寄存器搀菩。一個寄存器能存儲的最大值為1111111111111111(二進制)呕臂,65535(十進制)。
每個寄存器都能分為兩個獨立使用的8位寄存器來使用肪跋,例如AX可分為AH和AL歧蒋。

注意16位寄存器被拆分為8位后16進制的變化

字在寄存器中的存儲

8086CPU可以一次性處理以下兩種尺寸的數(shù)據(jù)。1澎嚣、字節(jié)(byte)疏尿,一個字節(jié)由8個bit組成;2、字(word)易桃,一個字由兩個字節(jié)組成褥琐。
這里說下數(shù)制,通常我們使用十六進制來表示一個數(shù)據(jù)晤郑,因為4位二進制數(shù)代表一位16進制數(shù)敌呈,這樣看起問題來更為直觀。比如二進制0100111000100000可表示為4(0100)造寝、E(1110)磕洪、2(0010)、0(0000)十六進制數(shù)诫龙,如果這個數(shù)據(jù)在AX中析显,那么AH為4E、AL為20

幾條匯編指令

匯編指令 控制CPU完成操作 用高級語言的語法描述
mov ax,18 將18送入寄存器AX AX=18
mov ah,78 將78送入寄存器AH AH=78
add ax,8 將寄存器AX中的數(shù)值加上8 AX=AX+8
mov ax,bx 將寄存器BX中的數(shù)據(jù)送入寄存器AX AX=BX
add ax,bx 將AX和BX中的數(shù)值相加 AX=AX+BX

注意:
1签赃、當(dāng)ax = 8226;bx = 8226執(zhí)行指令add ax,bx把bx的數(shù)據(jù)加入ax谷异。ax = 8226 + 8226 = 1044C,但是ax為16為寄存器锦聊,只能存放4位十六進制數(shù)據(jù)所以ax的數(shù)據(jù)位944C歹嘹。如果使用的是ah、al8位寄存器孔庭,和十六位也是同理尺上。
2、在使用匯編進行數(shù)據(jù)傳送或運算時圆到,注意指令的兩個操作對象的位數(shù)應(yīng)當(dāng)是一致的怎抛。比如8位寄存器應(yīng)該和8位寄存器或者8位寄存器最大值255的數(shù)據(jù)進行運算;16位寄存器應(yīng)該和16位寄存器或者16位寄存器最大值65535的數(shù)據(jù)進行計算芽淡。

物理地址

每一個內(nèi)存單元在存儲空間中都有唯一的地址抽诉,我們將這個地址稱為物理地址。在CPU向地址總線上發(fā)出物理地址之前吐绵,必須在內(nèi)部形成這個物理地址迹淌。

16位結(jié)構(gòu)的CPU

8086的CPU為16位結(jié)構(gòu)的CPU,特征如下:

  • 運算器一次最多可以處理16位數(shù)據(jù)
  • 寄存器的最大寬度為16位(如AX)
  • 寄存器和運算器之間的通路為16位(數(shù)據(jù)總線16位)

8086CPU給處物理地址的方法

8086有20位地址總線己单,也就是達到2^20*8bit(每個內(nèi)存單元的大小)=1MB的尋址能力唉窃。但是8086又是16位結(jié)構(gòu)在內(nèi)部一次性處理、傳輸纹笼、暫時存儲的地址位16位地址纹份,也就是只達到64KB的殉職能力。

8086CPU采用了地址加法器將2個16位地址合成為一個20位物理地址廷痘。

8086CPU相關(guān)部件得邏輯結(jié)構(gòu)

地址加法器采用物理地址=段地址×16+偏移地址的方法合成物理地址蔓涧。

打比方
從學(xué)校到圖書館的距離位2826米。

學(xué)校到圖書館的距離

當(dāng)同學(xué)A用紙條告訴同學(xué)B距離時候笋额,可以在紙條上寫入2826元暴。但是如果紙條有兩張,但每張紙條只能寫三個數(shù)字的時候兄猩,可以在第一張紙條寫入200,第二張紙條寫入826,然后約定第一張紙條×10后與第二張紙條相加茉盏,200×10+826=2826米。

段地址×16
段地址×16有個更為常用的說話是二進制左移4位枢冤,用二進制舉例如下:

左移位數(shù) 二進制 十六進制 十進制
0 10 2 2
1 100 4 4
2 1000 8 8
3 10000 10 16
4 100000 20 32

故地址加法器的工作過程如下圖所示:

地址加法器工作過程

段的概念

CPU使用將內(nèi)存分段的方式來管理內(nèi)存鸠姨。例如:10000~100FF內(nèi)存單元組成一個段,該段的段地址為1000H(根據(jù)公式段地址左移4位與偏移地址相加得到的物理地址)大小為100H(0~FF淹真,為FF+1=100)

分段

因為數(shù)據(jù)可以通過不同的段地址和偏移地址指向同一物理地址(段地址2000H讶迁,偏移地址1F60H 或者 段地址2100H,偏移地址0F60H)核蘸,故在描述中可以寫為:

  • 數(shù)據(jù)存在內(nèi)存2000:1F60單元中巍糯。
  • 數(shù)據(jù)存在內(nèi)存的2000H段中的1F60H單元中。

段寄存器(CS值纱、SS鳞贷、DS、ES)

如要訪問內(nèi)存時需要提供段地址和偏移地址虐唠。段地址在段寄存器中存放搀愧。8086CPU有4個寄存器(CS、SS疆偿、DS咱筛、ES)

CS和IP

CS和IP時8086CPU中最關(guān)鍵的寄存器,CS為代碼段寄存器杆故,IP為指令指針寄存器迅箩,在任意時刻,CPU將CS:IP(CS×16+IP)指向的內(nèi)容當(dāng)作指令執(zhí)行处铛。
運算時運行過程如下:

1
2
3
4
5
6
7
8

在8086CPU加電啟動或復(fù)位后饲趋,CS和IP被設(shè)置為CS=FFFFH, IP=0000H,即在開機啟動時拐揭,CPU從內(nèi)存FFFF0H單元中讀取第一條指令開始執(zhí)行。
如果說奕塑,內(nèi)存中的一段信息曾被CPU執(zhí)行過的話堂污,那么,它所在的內(nèi)存單元必然被CS:IP指向過龄砰。

修改CS盟猖、IP的指令

我們通常使用mov指令來修改通用寄存器的值,但是不能用該指令修改CS换棚、IP的值式镐。能夠改變CS、IP的內(nèi)容的指令統(tǒng)稱為轉(zhuǎn)移指令固蚤。
jmp指令

  • jmp 2AE3:3娘汞,執(zhí)行后,CS=2AE3H颇蜡,IP=0003H价说,CPU將從2AE33H處讀取指令。
  • 若只想修改IP的值风秤,可以“jump 某一合法寄存器”
jmp ax AX CS IP
執(zhí)行前 1000H 2000H 0003H
執(zhí)行后 1000H 2000H 1000H

代碼段

將若干地址連續(xù)的內(nèi)存單元看作一個段鳖目,根據(jù)公式“物理地址=段地址×16+偏移地址”那么:

  • 段的起始地址一定是16的倍數(shù)。
  • 偏移地址為16位缤弦,16位地址的尋址能力為2^16=64KB领迈,所以一個段的最大長度為64KB。

將一段內(nèi)存當(dāng)作代碼段碍沐,僅是我們在編程時的一種安排狸捅,若要讓CPU執(zhí)行我們放在代碼段中的指令,必須將CS:IP指向我們定義代碼段的首地址累提。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尘喝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斋陪,更是在濱河造成了極大的恐慌朽褪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件无虚,死亡現(xiàn)場離奇詭異缔赠,居然都是意外死亡,警方通過查閱死者的電腦和手機友题,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門嗤堰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人度宦,你說我怎么就攤上這事踢匣「娼常” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵离唬,是天一觀的道長凫海。 經(jīng)常有香客問我,道長男娄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任漾稀,我火速辦了婚禮模闲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崭捍。我一直安慰自己尸折,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布殷蛇。 她就那樣靜靜地躺著实夹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粒梦。 梳的紋絲不亂的頭發(fā)上亮航,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音匀们,去河邊找鬼缴淋。 笑死,一個胖子當(dāng)著我的面吹牛泄朴,可吹牛的內(nèi)容都是我干的重抖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祖灰,長吁一口氣:“原來是場噩夢啊……” “哼钟沛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起局扶,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恨统,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后详民,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體延欠,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年沈跨,在試婚紗的時候發(fā)現(xiàn)自己被綠了由捎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡饿凛,死狀恐怖狞玛,靈堂內(nèi)的尸體忽然破棺而出软驰,到底是詐尸還是另有隱情,我是刑警寧澤心肪,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布锭亏,位于F島的核電站,受9級特大地震影響硬鞍,放射性物質(zhì)發(fā)生泄漏慧瘤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一固该、第九天 我趴在偏房一處隱蔽的房頂上張望锅减。 院中可真熱鬧,春花似錦伐坏、人聲如沸怔匣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽每瞒。三九已至,卻和暖如春纯露,著一層夾襖步出監(jiān)牢的瞬間剿骨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工苔埋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留懦砂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓组橄,卻偏偏與公主長得像荞膘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子玉工,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習(xí)匯編語言》系列視頻的筆記翰萨,在此感謝他和像他一樣...
    Gibbs基閱讀 37,205評論 8 114
  • 一個典型的 CPU由運算器脏答、控制器、寄存器等器件構(gòu)成,這些器件靠內(nèi)部總線相連殖告。前面所說的總線阿蝶,相對于 CPU 而言...
    劉桂良閱讀 1,579評論 1 3
  • 王爽匯編全書知識點大綱 第一章 基礎(chǔ)知識 機器語言 匯編語言的產(chǎn)生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,418評論 0 1
  • 組件 計算機是一種數(shù)據(jù)處理設(shè)備,它由CPU和內(nèi)存以及外部設(shè)備組成黄绩。CPU負責(zé)數(shù)據(jù)處理羡洁,內(nèi)存負責(zé)存儲,外部設(shè)備負責(zé)數(shù)...
    哆啦灬少A夢閱讀 1,588評論 1 2
  • 阿爸天父爽丹,孩子在主耶穌的名里以及圣靈的大能之中筑煮,來到你的面前。我奉耶穌的名粤蝎,靠圣靈的大能求告你咆瘟。你是我生命的主,是...
    余姊妹閱讀 14,812評論 0 0