8086匯編筆記

匯編指令:機器碼的助記符辛臊,有對應(yīng)的機器碼
偽指令:沒有對應(yīng)的機器碼,由編譯器執(zhí)行房交,計算機并不執(zhí)行
其它符號:+-*/等由編譯器識別彻舰,沒有對應(yīng)的機器碼

每一種CPU都有自己的匯編指令集
CPU可以直接使用的信息在存儲器中存放
在存儲器中指令和數(shù)據(jù)沒有任何區(qū)別,都是二進制信息
存儲單元從零開始順序編號
一個存儲單元可以存儲8個bit候味,即8位二進制數(shù)

計算機最小信息單位是bit刃唤,1bit= 1個二進制位,8bit = 1Byte(字節(jié))
1KB = 1024B白群,1MB = 1024KB尚胞,1GB = 1024MB,1TB = 1024GB

地址總線的寬度決定了CPU的尋址能力
數(shù)據(jù)總線的寬度決定了CPU與其它器件間一次數(shù)據(jù)傳送量
控制總線的寬度決定了CPU對其它器件的控制能力

數(shù)據(jù)總線
一個CPU有多少根數(shù)據(jù)總線帜慢,就可以說它是多少位的CPU笼裳,
比如32位CPU有32根數(shù)據(jù)總線
每根總線每次可以傳遞1個bit
所以32位的CPU一次最多可以傳送4個字節(jié)的數(shù)據(jù)量

1比特 = 1個二進制位
1字節(jié) = 8比特 (1Byte = 8bit)
1KB = 1024Byte,1MB = 1024KB粱玲,1GB = 1024MB躬柬,1TB = 1024GB

1Byte = 8bit,1Btye等于8個二進制位抽减,那么可以表示的最大數(shù)據(jù)為1111 1111允青,
也就是十進制的255,也等于16進制的0xFF卵沉。
所以得到:2個十六進制數(shù)表示1個字節(jié)颠锉,1個16進制位表示4bit

數(shù)據(jù)寄存器     指針和變址寄存器   段寄存器     控制寄存器
AX:AH, AL    SP 堆棧指針      CS 代碼段    IP 指令指針
BX:BH, BL    BP 基數(shù)指針      DS 數(shù)據(jù)段    FLAG 狀態(tài)標志
CX:CH, CL    SI 源變址        SS 堆棧段
DX:DH, DL    DI 目的變址      ES 附加段

8086CPU地址總線20根,數(shù)據(jù)總線16根偎箫,16根數(shù)據(jù)總線最大可以描述0xFFFF木柬,也就是16位64KB的數(shù)據(jù),
所以最多可以尋址64KB的內(nèi)存地址淹办,然而20根地址總線支持1M的尋址范圍眉枕,為了解決該問題,8086CPU
的解決辦法是: 物理地址 = 段地址 * 16 + 偏移地址

例子: CS:IP
0xCFFA7 = 0xCFFA * 16 + 0x0007 0xCFFA:0x0007
0xCFFA7 = 0xCFF0 * 16 + 0x00A7 0xCFF0:0x00A7
0xCFFA7 = 0xCF00 * 16 + 0x0FA7 0xCF00:0x0FA7
0xCFFA7 = 0xC000 * 16 + 0xFFA7 0xC000:0xFFA7

8086CPU不支持直接對段地址和指針賦值,若想修改CS:IP的值速挑,
可以使用 jmp 段地址:偏移地址 來實現(xiàn)谤牡,其作用為:
jmp.段地址修改CS
jmp.偏移地址修改IP

當我們僅需要修改IP的值,此時的jmp一個合法的寄存器即可姥宝,比如修改IP的值為3H:

mov ax,3h
jmp ax

cs = 1000h
ip = 4h
mov ax,2ecH
jmp ax

此時 cs = 1000h,ip = 2ecH

jmp不允許直接賦值翅萤,必須要先把值賦給寄存器之后,再jmp這個寄存器腊满,
此限制同樣適用于call等指令

SS:SP
堆棧段:棧頂指針

8086CPU是16位的套么,所以SP也是16位的,其可以表示的最大數(shù)據(jù)為0xFFFF 也就是64KB

PUSH 入棧 PUSH AX ;將AX的數(shù)據(jù)壓如棧
POP 出棧 POP AX ;將棧頂指針指向的數(shù)據(jù)送入AX

棧是以字為單位的碳蛋,也就是2個字節(jié):
PUSH AX 會使得SP-=2胚泌,因為棧底是高位,棧頂是低位肃弟,所以壓棧操作會使棧頂指針向上(低位)移動
而AX是16位寄存器玷室,也就是2個字節(jié),所以SP會減2
需要注意的是笤受,對于16位CPU穷缤,PUSH操作即壓棧2個字節(jié)的數(shù)據(jù),所以即使PUSH AH/AL箩兽,也是2個字節(jié)

POS AX 則使得SP+=2津肛,它與PUSH指令的操作正好相反

Loop指令和cx寄存器配合使用,語法:

mov cx,循環(huán)次數(shù)

標號:
循環(huán)體
loop 標號

執(zhí)行流程:
1.先將cx寄存器自減 cx = cx - 1
2.判斷cx的值
如果不為0則執(zhí)行標號的代碼汗贫,再次執(zhí)行步驟1
如果為0則執(zhí)行l(wèi)oop后的代碼快耿,跳出循環(huán)

示例:計算2^6

mov ax,2H
mov cx,5    ;和do while一樣,標號bh會先執(zhí)行一次芳绩,再進入循環(huán),所以這里是5

bh: add ax,ax
loop bh

在我們計算內(nèi)存數(shù)據(jù)時撞反,需要注意溢出問題妥色,例子:
取FFFF0H - FFFF2H所有值得和存到DX寄存器中,數(shù)據(jù)如下:

FFFF0H --- FFH
FFFF1H --- FFH
FFFF2H --- FFH

此問題有2點需要特別注意
1.一個內(nèi)存地址就是1個字節(jié)遏片,即8bit嘹害,所以最大值只能存儲FFH,1AC吮便、30EB這些肯定存不了
2.當我們使用16位寄存器比如AX對FFFF0H取值時笔呀,
因為AX是2個字節(jié),所以會讀取FFFF0H和FFFF1H的值髓需,這顯然與我們的預期違背许师,所以
此時我們需要使用8位寄存器來取值以保證只讀取一個內(nèi)存地址中的數(shù)據(jù),但是使用8位寄存器
又會出現(xiàn)溢出的問題,因為8位寄存器比如AL在運算FF+FF時并不會進位到AH微渠,而AL8位最多可以
表示FFH搭幻,所以溢出。解決方法為使用其它寄存器來過渡一下逞盆,如:

mov ax,ffffh
mov ds,ax

mov dx,0h

mov al,ds:[0]    ;第一次獲取不存在溢出問題
mov ah,0h
add dx,ax

mov al,ds:[1]    ;第二次獲取存在溢出問題
mov ah,0
add dx,ax        ;因為這里使用dx和ax計算相加檀蹋,所以可以進位,就解決了溢出問題

mov al,ds:[2]    ;第三次獲取存在溢出問題
mov ah,0
add dx,ax        ;因為這里使用dx和ax計算相加云芦,所以可以進位俯逾,就解決了溢出問題

這樣,我們就利用16位寄存器可以進位的特點解決了8位寄存器溢出問題

偽指令

db(define byte)    ;自定義字節(jié)
dw(define word)  ;自定義字
db 20 dup(0)       ;開辟20個字節(jié)的地址空間并用0填充
db 20 dup(5)       ;開辟20個字節(jié)的地址空間并用5填充
saaume cs:code     ;指定段地址
code segment       ;定義段
  ...
cbegin:
  ...
  ...
  ;退出代碼
  mov ah,4ch
  int 21h

code ends          ;結(jié)束段定義
end                ;指示編譯器程序編碼結(jié)束舅逸,end后可增加表示指定程序的代碼段入口地址
                    比如end cbegin,此時begin標識之前的數(shù)據(jù)不會再被CPU當做代碼執(zhí)行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桌肴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子堡赔,更是在濱河造成了極大的恐慌识脆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件善已,死亡現(xiàn)場離奇詭異灼捂,居然都是意外死亡,警方通過查閱死者的電腦和手機换团,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門悉稠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艘包,你說我怎么就攤上這事的猛。” “怎么了想虎?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵卦尊,是天一觀的道長。 經(jīng)常有香客問我舌厨,道長岂却,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任裙椭,我火速辦了婚禮躏哩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揉燃。我一直安慰自己扫尺,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布炊汤。 她就那樣靜靜地躺著正驻,像睡著了一般弊攘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拨拓,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天肴颊,我揣著相機與錄音,去河邊找鬼渣磷。 笑死婿着,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的醋界。 我是一名探鬼主播竟宋,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼形纺!你這毒婦竟也來了丘侠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤逐样,失蹤者是張志新(化名)和其女友劉穎蜗字,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脂新,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡挪捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了争便。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片级零。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滞乙,靈堂內(nèi)的尸體忽然破棺而出奏纪,到底是詐尸還是另有隱情,我是刑警寧澤斩启,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布序调,位于F島的核電站,受9級特大地震影響兔簇,放射性物質(zhì)發(fā)生泄漏炕置。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一男韧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧默垄,春花似錦此虑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介杆。三九已至,卻和暖如春韭寸,著一層夾襖步出監(jiān)牢的瞬間春哨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工恩伺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赴背,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓晶渠,卻偏偏與公主長得像凰荚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子褒脯,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學習匯編語言》系列視頻的筆記适篙,在此感謝他和像他一樣...
    Gibbs基閱讀 37,112評論 8 114
  • 王爽匯編全書知識點大綱 第一章 基礎(chǔ)知識 機器語言 匯編語言的產(chǎn)生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,407評論 0 1
  • 編程語言的發(fā)展 機器語言由0和1組成 匯編語言(Assembly Language)用符號代替了0和1往核,比機器語言...
    阿凡提說AI閱讀 3,983評論 0 15
  • 通用人工智能
    wjfdarkhorse閱讀 225評論 0 0
  • 最近加了幾個微信群和qq群,我想和大家一起深度分析一下這幾個我覺得質(zhì)量和質(zhì)感還不錯的社群嚷节。 正如我上篇提到我對自己...
    羅崇杰Loh閱讀 3,232評論 0 1