(二)常用指令簡單介紹

1、內存中字的存儲

CPU 中,用 16 位寄存器來存儲一個字,高 8 位放在高位字節(jié),低 8 位放在低字節(jié)。比如我們從 0 地址開始存放 20000,如下圖所示,在圖中用 01 兩個內存單元來存儲 20000(4E20H)01 這兩個單元可以看做一個起始地址為 0 的字單元,則數(shù)據(jù) 4E20H 的低位字節(jié)放在 0 號單元中,高位字節(jié)存放在 1 號單元中。

2、mov、add、sub 指令

mov 指令有以下幾種形式

mov 寄存器,數(shù)據(jù)                  如:mov ax,6
mov 寄存器,寄存器                 如:mov ax,bx
mov 寄存器,內存單元               如:mov ax,[0]
mov 內存單元,寄存器               如:mov [0],ax
mov 段寄存器,寄存器               如:mov ds,ax
注:mov 內存單元,內存單元          如:mov [0],[1]   這是錯誤的寫法,mov 指令不能用內存地址直接對內存地址賦值

3、棧

棧是一種具有特殊的訪問方式的存儲空間,遵循后進先出的規(guī)則。8086 CPUSS:SP 指示棧頂?shù)奈恢茫⑻峁?pushpop 指令實現(xiàn)壓棧和出棧。
pushpop 指令有以下幾種形式

push 寄存器     push ax         將寄存器 ax 的數(shù)據(jù)壓入棧中
pop 寄存器      pop ax          從棧頂取出數(shù)據(jù)送入 ax
注:8086 CPU 的壓棧和出棧操作都是以字節(jié)為單位進行的。

4、loop 指令

英文單詞 loop 有循環(huán)的意義,顯然這個指令和循環(huán)有關。
loop 指令格式:loop 標號CPU 執(zhí)行 loop 指令的時候,要進行兩部操作

1. sub cx,1H     先將 cx 減一
2. 判斷 cx 中的值,不為零則跳轉至標號處執(zhí)行程序,為零則向下執(zhí)行。
例:add ax,ax 需要重復執(zhí)行 10 次
mov cx,10
s:  add ax,ax
loop s

5、mul、div 指令

mul 乘法指令
(1)兩個相乘的數(shù)要么都是 8 位,要么都是 16 位;如果是 8 位,一個存放在 al 中,另一個存放在 8 位的寄存器或者內存字節(jié)單元中;如果是 16 位,一個默認值 ax 中,另一個放在 16 位寄存器或內存單元字中。
(2)結果:如果是 8 位乘法,結果默認放在 ax 中;如果是 16 位乘法,結果高位默認在 dx 中,地位在 ax 中。

指令格式:mul 寄存器      如:mul ax
mul 內存單元     如:mul byte ptr ds:[0]

div 除法指令
(1)除數(shù):有 8 位和 16 位兩種,在一個寄存器或內存單元中;
(2)被除數(shù):默認放在 axdxax 中,如果除數(shù)為 8 位,則被除數(shù)為 16 位,默認存放在 ax 中,如果除數(shù)為 16 位,被除數(shù)則為 32 位, dx 存放高 16 位, ax 存放低 16 位。
(3)結果:如果除數(shù)為 8 位,則 al 存儲除法操作的商, ah 存儲除法操作的余數(shù),如果除數(shù)為 16 位,則 ax 存儲除法操作的商, dx 存儲除法操作的余數(shù)。

指令格式:div 寄存器      如:div ax
div 內存單元     如:div word ptr ds:[0]

6、偽指令db、dw、dd、dup

db = define byte  定義數(shù)據(jù)寬度為一個字節(jié)
dw = define word  定義數(shù)據(jù)寬度為一個字
dd = define duble word  定義數(shù)據(jù)寬度為兩個字

dup 是一個操作符,它是配合 db dw dd 等數(shù)據(jù)偽指令一起使用的,用來數(shù)據(jù)的重復。

指令格式:db 重復次數(shù) dup(重復的字節(jié)型數(shù)據(jù))
指令格式:dw 重復次數(shù) dup(重復的字型數(shù)據(jù))
指令格式:dd 重復次數(shù) dup(重復的雙字型數(shù)據(jù))
db 3 dup(0,1,2)
定義了 `9` 個字節(jié),相當于 `db 0,1,2,0,1,2,0,1,2`

7、offset 操作符

操作符 offset 在匯編語言中是由編譯器處理的符號,它的功能就是取得標號的偏移地址,比如下面的程序

assume cs:code
codesg segment
start: mov ax,offset start      ;相當于 mov ax,0
s: mov ax,offset s      ;相當于 mov ax,3
codesg ends
end start

在上面的程序中,offset 操作符取得了標號 starts 的偏移地址 03,因為第一條指令的長度為 3 個字節(jié),則 s 的偏移地址為 3

8、轉移指令

可以修改 IP 或者同時修改 CSIP 的指令統(tǒng)稱為轉移指令,概括的講,轉移指令就是可以控制 CPU 執(zhí)行內存中某處代碼的指令。

8086 CPU 的轉移行為有以下幾類
* 只修改 IP 時,稱為段內轉移,比如:jmp ax
* 同時修改 CS 和 IP 時,稱為段間轉移,比如:jmp 1000:10
由于轉移指令對 IP 的修改范圍不同,段內轉移又分為以下兩種情況
* 短轉移 IP 的修改范圍為 -128~127
* 近轉移 IP 的修改范圍為 -32768~32767
8086 CPU 的轉移指令有以下幾類
* 無條件轉移指令,如:jmp
* 條件轉移指令,如:jz
* 過程
* 中斷

jmp 指令格式

jmp short 標號     實現(xiàn)段內短轉移
jmp near ptr 標號  實現(xiàn)段內近轉移
jmp far ptr 標號   實現(xiàn)段間轉移,又稱為遠轉移
jmp word ptr 內存單元地址(段內轉移)
jmp dword ptr 內存單元地址(段間轉移)
功能:從內存單元地址處放著兩個字,高地址處的字是轉移的目的段地址,低地址處是轉移目的偏移地址。

8、call 和 ret 指令

ret 指令用棧中的數(shù)據(jù),修改 IP 的內容,從而實現(xiàn)近轉移;
retf 指令用棧中的數(shù)據(jù),修改 CSIP 的內容,從而實現(xiàn)遠轉移;

CPU 執(zhí)行 ret 指令時,進行下面 2 步操作
1、(IP) = ((ss)* 16 + (sp))
2、(sp) = (sp) + 2   相當于 pop ip
CPU 執(zhí)行 retf 指令時,進行下面 4 步操作
1、(IP) = ((ss)* 16 + (sp))
2、(sp) = (sp) + 2   相當于 pop ip
3、(CS) = ((ss)* 16 + (sp))
4、(sp) = (sp) + 2   相當于 pop cs

call 不能實現(xiàn)短轉移,除此之外,call 指令實現(xiàn)轉移的方法和 jmp 指令的原理相同,主要進行兩個步驟

1、將當前的 `IP` 或 `CS` 和 `IP` 壓入棧中
2、轉移

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎入門學習匯編語言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,289評論 8 114
  • 王爽匯編全書知識點大綱 第一章 基礎知識 機器語言 匯編語言的產(chǎn)生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,431評論 0 1
  • 計算機通過執(zhí)行指令序列來使機器得以工作,所以對于每一系列的計算機都有指定的一組指令集供計算機使用,這組指令...
    未來科技工作室閱讀 8,055評論 1 10
  • 躺在床上做夢,夢見左手的地方長出藤芽,黑色的線條一點點擴開,昆蟲被氣味吸引過來,被吃掉
    U0閱讀 218評論 0 1
  • 由內心而發(fā)的人,才能讓我們走得遠,才不會因為受外界的因素而影響。
    福海藍閱讀 183評論 0 1