匯編語言程序課件_第1頁
匯編語言程序課件_第2頁
匯編語言程序課件_第3頁
匯編語言程序課件_第4頁
匯編語言程序課件_第5頁
已閱讀5頁,還剩584頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1

組合語言基礎(chǔ)知識封面21.1

電腦系統(tǒng)概述1.1.1電腦的硬體1.1.2電腦的軟體1.1.3電腦程式設(shè)計(jì)語言返回第一章31.1.1電腦的硬體

對組合語言程式員來說,電腦硬體的結(jié)構(gòu)如下圖所示(CPU、記憶體、介面(外設(shè))):

運(yùn)算器控制器寄存器主記憶體系統(tǒng)匯流排I/O接口輸入設(shè)備輸出設(shè)備輔助記憶體CPU外匯流排41.中央處理單元

由三部分組成??刂破鳎喝≈噶睿?jīng)解碼分析後發(fā)出各種控制命令,如取數(shù)、存數(shù)、運(yùn)算等。運(yùn)算器:完成各種算術(shù)運(yùn)算和邏輯運(yùn)算。寄存器(或寄存器陣列):由多個(gè)8位、16位寄存器組成,提供各種操作所需要的數(shù)據(jù)。5

2.記憶體1)存放程式和數(shù)據(jù);可重複讀?。恍聰?shù)據(jù)覆蓋原數(shù)據(jù)。

2)主存:半導(dǎo)體,快,成本高,容量??;輔存:軟硬磁片、光碟;

3)RAM:可讀可寫,易失性記憶體;

ROM:只讀,非易失性記憶體;

4)由大量存儲單元組成:單位、內(nèi)容、地址、容量、B(BYTE)、KB、MB、GB、TB等。6

3.外部設(shè)備和介面設(shè)備類型:人機(jī)交互機(jī)器間通信外存(可看做I/O設(shè)備)介面:①介面的必要性:格式轉(zhuǎn)換、電平轉(zhuǎn)換…②介面的組成:三個(gè)(組)寄存器;通過寄存器交換數(shù)據(jù);

③對接口的訪問:端口

端口號端口地址、I/O地址;返回1.17

1.1.2電腦軟體1.系統(tǒng)軟體面向電腦、由廠家提供;其作用為管理和維護(hù)、充分發(fā)揮其功能、為用戶提供一個(gè)方便使用的系統(tǒng)。如操作系統(tǒng),診斷系統(tǒng),程式設(shè)計(jì)語言等2.應(yīng)用軟體面向問題、由公司或用戶編寫★集成開發(fā)環(huán)境:開發(fā)工具包括文本編輯、翻譯程式、調(diào)試程式、連接程式等,在DOS時(shí)代,其各自是獨(dú)立的;現(xiàn)在將其集成為一個(gè)軟體,即為“集成開發(fā)環(huán)境”。返回1.18

1.1.3電腦的程式設(shè)計(jì)語言1.機(jī)器語言低級語言

2.組合語言程式設(shè)計(jì)語言

3.高級語言C/C++、JAVA、 DELPHI……9

1.機(jī)器語言指令→機(jī)器指令;機(jī)器指令的組成:操作碼、運(yùn)算元;指令系統(tǒng);機(jī)器語言:指令系統(tǒng)及使用指令系統(tǒng)編寫程式的規(guī)則。機(jī)器語言特點(diǎn):電腦唯一能夠直接識別的語言。目標(biāo)程式:用機(jī)器語言描述的程式。機(jī)器語言的致命缺點(diǎn):難以使用。如100+2568086機(jī)器語言程式:B86400050001A3002010

2.組合語言彙編指令:用便於記憶、並能描述指令功能的符號表示機(jī)器指令→彙編指令(符號指令)。助記符:表示指令操作碼的符號,一般用英語單詞或縮寫。指令的運(yùn)算元也用符號表示。組合語言:彙編指令及使用彙編指令編寫程式的規(guī)則。(其他語言要素第三章介紹)組合語言(源)程式:使用組合語言編寫的程式。組合語言的特點(diǎn):彙編指令與機(jī)器指令一一對應(yīng),但相對機(jī)器語言易於理解、掌握,當(dāng)我們用低級語言編寫程式時(shí)使用組合語言而不用機(jī)器語言。彙編和組合語言程式:翻譯過程翻譯程式。11

3.高級語言機(jī)器語言和組合語言以外的程式設(shè)計(jì)語言統(tǒng)稱高級語言。其特點(diǎn)是更加接近自然語言和慣用的數(shù)學(xué)表達(dá)形式,與電腦硬體結(jié)構(gòu)無關(guān),因而便於使用,便於交流和推廣。總之,高級語言編程效率高,但運(yùn)行效率低。高級語言可分成編譯型和解釋型高級語言,分別使用編譯程序和解釋程式將根源程式翻譯成機(jī)器語言程式,然後交電腦執(zhí)行。12

4.組合語言程式設(shè)計(jì)的意義學(xué)習(xí)組合語言的意義:1)與硬體密切相關(guān),是學(xué)習(xí)硬體類課程的先行課和基礎(chǔ)課。2)有利於理解電腦的工作原理。3)可直接而有效地控制硬體。4)執(zhí)行效率高,佔(zhàn)用空間小。5)特殊應(yīng)用只能使用組合語言,如加密解密等。應(yīng)該指出的是:在電腦速度大大提高和記憶體容量大大增加的今天,高級語言的使用更為廣泛和普遍(特別是編寫大型程式)。返回第一章131.2數(shù)據(jù)表示1.2.1數(shù)制1.2.2編碼1.2.3有符號數(shù)的表示方法1.2.4二進(jìn)位運(yùn)算返回第一章14

1.2.1數(shù)制[數(shù)制涉及三個(gè)問題:計(jì)數(shù)符號基數(shù)和權(quán)計(jì)數(shù)規(guī)則(1)計(jì)數(shù)符號

這是用於書寫數(shù)值的符號,所有計(jì)數(shù)符號的集合稱作數(shù)符集。k進(jìn)制的數(shù)符集中必然包含k個(gè)符號。比如:二進(jìn)位的數(shù)符集中有兩個(gè)符號:0和1;八進(jìn)制的數(shù)符集中有8個(gè)符號:0,1,2,3,4,5,6,7;十進(jìn)位的數(shù)符集中有10個(gè)符號:0,1,2,3,4,5,6,7,8,9;十六進(jìn)制的數(shù)符集中有16個(gè)符號:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。15數(shù)制的三個(gè)問題:1.二進(jìn)位數(shù)

(2)基數(shù)和權(quán)如果把用k進(jìn)制書寫的一個(gè)整數(shù)從右往左依次記作第0位、第1位、…、第n位,則第i位上的數(shù)符ai所代表的含義是ai×ki。在此,我們把k稱為一個(gè)數(shù)制的基數(shù),而把ki稱為k進(jìn)制數(shù)第i位的權(quán)。(如888,每個(gè)8的位權(quán)都不相同)(3)計(jì)數(shù)規(guī)則簡單地說,就是“逢k進(jìn)1,借1當(dāng)k”。]…………………..1.二進(jìn)位數(shù)

11011011.101B=1x27+1×26+0×25+1×24+1×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3

二進(jìn)位數(shù)是電腦內(nèi)部採用的,並唯一能夠直接被電腦識別的數(shù)。162.十六進(jìn)制數(shù)2.十六進(jìn)制數(shù)

8a0f.6bH=8×163+10×162+0×161+15×160+6×16-1+11×16-2

引入十六進(jìn)制數(shù)的目的是為了描述二進(jìn)位數(shù)。數(shù)的書寫方法:

1)二進(jìn)位數(shù)尾部加B(b)。

2)十六進(jìn)制數(shù)尾部加H(h);如記數(shù)符號a,b,c,d,e,f打頭,頭部應(yīng)加0,如0A8F5H;記數(shù)符號a,b,c,d,e,f不區(qū)別大小寫,與ABCDEF等效。

3)十進(jìn)位數(shù)尾部加D(d),但通??梢允÷?。173.數(shù)制間轉(zhuǎn)換3.數(shù)制間轉(zhuǎn)換

1)十進(jìn)位數(shù)轉(zhuǎn)換二進(jìn)位數(shù);

2)十進(jìn)位數(shù)轉(zhuǎn)換十六進(jìn)制數(shù);

3)二進(jìn)位數(shù)十六進(jìn)制數(shù)互相轉(zhuǎn)換;

返回1.2181.2.1-3數(shù)制轉(zhuǎn)換:十進(jìn)位→二進(jìn)位(整數(shù))①將整數(shù)部分不斷除以2,記下每次得到的餘數(shù),直到商為零;②餘數(shù)倒排,即最後得到的餘數(shù)排在最高位,第一個(gè)餘數(shù)排在最低位。例如將十進(jìn)位數(shù)13轉(zhuǎn)換成二進(jìn)位數(shù):

213餘數(shù)

26-----123-----021-----10-----1 13D=1101B191.2.1-3數(shù)制轉(zhuǎn)換:十進(jìn)位→二進(jìn)位(小數(shù))

小數(shù)部分轉(zhuǎn)換:乘2取整,順序排列得到的整數(shù)。例如將0.8125轉(zhuǎn)換成二進(jìn)位數(shù):

0.8125

整數(shù)×2 1.6250 ×2 1.25 ×2 0.50 ×2 1.000.8125D=0.1101B(有時(shí)會有轉(zhuǎn)換誤差,如0.3D)返回?cái)?shù)制轉(zhuǎn)換201.2.1-3數(shù)制轉(zhuǎn)換:十進(jìn)位→十六進(jìn)制十進(jìn)位數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù),方法同十進(jìn)位數(shù)轉(zhuǎn)換成二進(jìn)位數(shù),只不過“除2取餘”變?yōu)椤俺?6取餘”,“乘2取整”變?yōu)椤俺?6取整”。同理,如果要將十進(jìn)位數(shù)轉(zhuǎn)換為其他數(shù)制的數(shù)(如八進(jìn)制數(shù)),也採用同樣的方法。二進(jìn)位數(shù)、十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)位數(shù)教材未介紹,只要將二進(jìn)位數(shù)、十六進(jìn)制數(shù)按位權(quán)展開相加即可,如將8A.B5H轉(zhuǎn)換成十進(jìn)位數(shù):8A.B5H=8×161+10×160+11×16-1+5×16-2

=128+10+0.6875+0.0195=138.707D返回?cái)?shù)制轉(zhuǎn)換21二進(jìn)位數(shù)互相轉(zhuǎn)換十六進(jìn)制數(shù)返回?cái)?shù)制轉(zhuǎn)換5A.5H22

1.2.2編碼電腦中的數(shù)採用二進(jìn)位數(shù),字母、符號等也只能採用二進(jìn)位代碼(0,1)的排列組合表示(編碼)。(兩種編碼:BCD碼、ASCII碼)1.BCD碼(8421碼、二──十進(jìn)位數(shù))解決十進(jìn)位數(shù)在電腦內(nèi)部如何表示。BCD碼規(guī)定用四位二進(jìn)位數(shù)表示一位十進(jìn)位數(shù)。對多位十進(jìn)位數(shù),只要把每一位十進(jìn)位數(shù)分別表示為四位二進(jìn)位數(shù)即可。十進(jìn)位BCD碼

00000100012001030011401005010160110701118100091001十進(jìn)位BCD碼

2800101000956100101010110232.ASCII碼2.ASCII碼解決字母、符號在電腦內(nèi)部如何表示?;続SCII碼(標(biāo)準(zhǔn)ASCII碼)用七位二進(jìn)制數(shù)表示一個(gè)符號(共128個(gè));書寫:用兩位十六進(jìn)制數(shù)書寫,如41HA;種類:1)控制字元(前32個(gè)和最後一個(gè)):

0D回車,0A換行;

2)其他為列印字元(可顯示字元);應(yīng)記住的ASCII碼:30H~39H,41H,61H擴(kuò)展ASCII碼用八位二進(jìn)位數(shù)表示一個(gè)符號(共256個(gè))。返回1.224

1.2.3有符號數(shù)表示方法0.無符號數(shù)、有符號數(shù)、機(jī)器數(shù)、真值1.原碼正數(shù)原碼:符號位為0,數(shù)值位照抄。負(fù)數(shù)原碼:符號位為1,數(shù)值位照抄。例:X=+25=+00011001B[X]原=00011001BX=-25=-00011001B[X]原=10011001B2.反碼正數(shù)反碼:符號位為0,數(shù)值位照抄。負(fù)數(shù)反碼:符號位為1,數(shù)值位取反。例:X=+25=+00011001B[X]反=00011001BX=-25=-00011001B[X]反=11100110B

原碼和反碼表數(shù)範(fàn)圍相同,都是-127~+127。253.補(bǔ)數(shù)3.補(bǔ)數(shù)為了將減法運(yùn)算變成加法來做,有符號數(shù)在電腦內(nèi)一律採用補(bǔ)數(shù)表示。正數(shù)補(bǔ)數(shù):符號位為0,數(shù)值位照抄。負(fù)數(shù)補(bǔ)數(shù):符號位為1,數(shù)值位取反加一。例:X=+25=+00011001B[X]補(bǔ)=00011001BX=-25=-00011001B[X]反=11100110B[X]補(bǔ)=11100111B

下麵是原碼、反碼和補(bǔ)數(shù)的小結(jié)。原碼、反碼、補(bǔ)數(shù)總結(jié):

1)正數(shù)的原碼反碼補(bǔ)數(shù)相同;負(fù)數(shù)的原碼反碼補(bǔ)數(shù)各不相同,但符號位都是1。

2)設(shè)字長為八位,原碼反碼的表數(shù)範(fàn)圍為

-127~+127,補(bǔ)數(shù)的表數(shù)範(fàn)圍為-128~+127。

3)已知某負(fù)數(shù)的補(bǔ)數(shù),求該負(fù)數(shù)的真值,方法如下:

①符號位不動,其餘位求反加一,得到的是該負(fù)數(shù)的原碼;

②根據(jù)原碼即可寫出該負(fù)數(shù)的真值。例:[X]補(bǔ)=11111100B[X]原=10000011B+1=10000100BX=-0000100=-4返回1.226

1.2.4二進(jìn)位運(yùn)算(含十六進(jìn)制運(yùn)算)1.算術(shù)運(yùn)算與十進(jìn)位運(yùn)算相同,只不過是逢2進(jìn)1,借1當(dāng)2。 加法 減法 乘法

0+0=0 0‐0=0 0×0=00+1=10‐1=1 0×1=01+0=11‐0=1 1×0=01+1=101‐1=0 1×1=12.十六進(jìn)制算術(shù)運(yùn)算:與十進(jìn)位運(yùn)算相同,但①逢16進(jìn)1,借1當(dāng)16;②注意運(yùn)算結(jié)果如為A,B,C,D,E,F(xiàn),不能寫成10,11,12,13,14,15。例1:計(jì)算85AH+924H85A+924————117E例2:計(jì)算800H‐1800‐001————7FF不可以寫成14逢16

進(jìn)1273.邏輯運(yùn)算3.邏輯運(yùn)算

與運(yùn)算(AND;∧):

1∧0=0 1∧1=1 0∧0=0 0∧1=0

或運(yùn)算(OR;∨):

1∨0=1 1∨1=1 0∨0=0 0∨1=1

非運(yùn)算(NOT;~或—

):~0=1 (0=1) ~1=0(1=0) 異或運(yùn)算(XOR;⊕)

1⊕0=1 1⊕1=0 0⊕0=0 0⊕1=1

注意:邏輯運(yùn)算是按位運(yùn)算。

28

4.用補(bǔ)數(shù)作減法(補(bǔ)充講義)我們用實(shí)例說明電腦在執(zhí)行減法指令時(shí),是如何把減法變成加法來做的(設(shè)字長為8位)。例1:(+5)-(+4)即(+00000101)-(+00000100)①機(jī)器中+5和+4都用補(bǔ)數(shù)表示。②對減數(shù)求補(bǔ)(求反加一),得到(-4)的補(bǔ)數(shù):11111100③(+5)的補(bǔ)數(shù)加(-4)的補(bǔ)數(shù):

00000101

+11111100 ——————————100000001④將結(jié)果00000001看作補(bǔ)數(shù),其真值即為+1。進(jìn)位被自動捨棄29用補(bǔ)數(shù)作減法(2)例2(+5)-(-4)即(+0000101)-(-0000100)①機(jī)器中+5和-4都用補(bǔ)數(shù)表示。(-4)補(bǔ)=11111100②對減數(shù)求補(bǔ),得到的是+4的補(bǔ)數(shù):00000100③將+5的補(bǔ)數(shù)加+4的補(bǔ)數(shù)

00000101+00000100——————————00001001④將結(jié)果看成補(bǔ)數(shù),其真值即為正確結(jié)果+9。例3:(-5)-(+4)和(-5)-(-4)步驟同上??傊孩俦粶p數(shù)和減數(shù)都用補(bǔ)數(shù)表示;

②機(jī)器對減數(shù)先求補(bǔ),而後做加;

③將計(jì)算結(jié)果看作補(bǔ)數(shù)。返回第一章301.3Intel80x86系列微處理器1.8086/8088/801868086:1978年推出;內(nèi)外數(shù)據(jù)匯流排16位;地址匯流排

20位;尋址範(fàn)圍1MB;主頻5MHz.8088:1979年推出;外部數(shù)據(jù)匯流排8位;其餘基本同8086,被稱為準(zhǔn)16位CPU。80186:增強(qiáng)了8086的功能,但作為電腦的CPU沒有被使用過,只作過某些板卡的控制器。31802862.80286(16位CPU)

1982年推出;內(nèi)外數(shù)據(jù)匯流排16位;地址匯流排24位;尋址範(fàn)圍16MB;主頻5MHz~20MHz。

80286支持兩種工作方式:實(shí)模式和保護(hù)模式。實(shí)模式:相當(dāng)於一個(gè)快速8086。保護(hù)模式:提供虛擬存儲管理和多任務(wù)的硬體控

制。物理尋址範(fàn)圍16MB,虛擬記憶體尋址範(fàn)圍可達(dá)1GB。指令系統(tǒng)除包含8086/80186指令外,新增15條保護(hù)方式指令32803863.80386(32位CPU)

1985年推出;內(nèi)外部數(shù)據(jù)匯流排32位;地址匯流排32位,物理尋址範(fàn)圍4GB,虛擬記憶體尋址範(fàn)圍可達(dá)64TB。主頻為16/25/33MHz。

386除支持286的兩種工作方式外,新增虛擬8086模式。虛擬8086模式的特點(diǎn):

1)既具有保護(hù)功能,又能執(zhí)行實(shí)模式下的8086代碼,且可以實(shí)現(xiàn)多任務(wù)。(可同時(shí)運(yùn)行多個(gè)DOS程式)

2)可以在虛擬8086模式和保護(hù)模式下快速、反復(fù)轉(zhuǎn)換。指令系統(tǒng)除相容原16位CPU指令外,全面升級為32位指令,並新增多條指令。3380486\pentium4.80486(32位CPU)

1989年推出;特點(diǎn):①將高速緩存、協(xié)處理器與CPU集成在一個(gè)晶片上;②部分採用了RISC技術(shù);③採用了指令流水線技術(shù);④大幅度提高了CPU的主頻,可達(dá)100MHz。5.Pentium/MMXPentium(32位或準(zhǔn)64位CPU)Pentium:1993年推出;內(nèi)部數(shù)據(jù)匯流排32位,外部數(shù)據(jù)匯流排64位;主頻60MHz~200MHz;採用超標(biāo)量技術(shù)。MMXPentium:1996年推出;主頻最高233MHz;新增57條多媒體指令,提高了多媒體軟體執(zhí)行速度。 下麵簡單介紹RISC技術(shù)和流水線技術(shù)。

RISC技術(shù):精簡指令系統(tǒng)電腦技術(shù)。其特點(diǎn)是:CPU的指令系統(tǒng)不含複雜指令,指令長度固定,指令格式種類少,尋址方式少,指令數(shù)量少(只選擇使用頻度很高的指令),因此,使電腦結(jié)構(gòu)變得更加簡單、有效,結(jié)合流水線等其他技術(shù),使一個(gè)時(shí)鐘週期完成一條指令,從而大大提高了電腦的速度。如1981年研製成的RSCII型CPU,只有31條指令,其性能卻比當(dāng)時(shí)最先進(jìn)的商品化微處理器MC68000和Z8000快3~4倍。

流水線技術(shù):電腦中的流水線技術(shù)和工廠中的流水裝配線類似。①將執(zhí)行一條指令需完成的操作分成若干子操作;②每個(gè)子操作由專門部件完成;③各子操作並行工作。由於子操作並行工作,提高了電腦的執(zhí)行速度。(但要注意,完成一條指令所需要的時(shí)間並沒有變。)(“每週期完成一條指令”和“完成一條指令需要一個(gè)週期”不同。)(超標(biāo)量)裝配線34Pentiumpro\pii/piii\p46.PentiumPro/PⅡ/PⅢ/P4

PentiumPro:1995年推出;Pentium的增強(qiáng)型晶片,主要用於伺服器.PII:1997年推出;在PentiumPro的基礎(chǔ)上增加了MMX指令。

PIII:1999年推出;在PII的基礎(chǔ)上增加了70條SSE指令。

P4:2000年推出;新增76條SSE2指令。另外,從PII時(shí)代開始,Intel為了佔(zhàn)領(lǐng)低端市場,推出了Celeron(賽揚(yáng))微處理器,目前,最新型的Celeron(賽揚(yáng))微處理器是所謂C4,與P4引腳相容。

返回第一章351.4PC微型電腦系統(tǒng)1.PC機(jī)的硬體基本配置:主機(jī)、鍵盤和滑鼠、

顯示器、軟碟驅(qū)動器、硬碟驅(qū)動

器和光盤驅(qū)動器等。2.主存空間的分配①常規(guī)記憶體:容量1MB;

00000H~0FFFFFH。*保留記憶體:顯示緩衝

區(qū)和擴(kuò)展ROM;*基本記憶體:DOS占

用、用戶區(qū)。擴(kuò)展記憶體640K384K保留記憶體基本記憶體常規(guī)記憶體36PC機(jī)的軟體②擴(kuò)展記憶體(XMS):對80286以上的CPU來說1MB以上的存儲空間稱為擴(kuò)展記憶體,可供用戶程式使用。3.PC機(jī)的軟體(學(xué)習(xí)《組合語言》使用的軟體)

①編輯程式,如DOS的EDIT。

②組合語言程式,如MASM6.X。

③連接程式LINK。

④調(diào)試程式DEBUG。返回第一章371.58086微處理器1.5.18086的功能結(jié)構(gòu)1.5.28086的寄存器組1.5.3記憶體組織與段寄存器

1.記憶體組織(位、位元組、地址、字單元…)

2.分段管理(分段、邏輯地址、物理地址…)

3.段寄存器(段寄存器、段超越….)返回第一章38

1.5.18086的功能結(jié)構(gòu)指令解碼匯流排介面單元執(zhí)行單元ABUSDBUSCBUS內(nèi)部數(shù)據(jù)匯流排內(nèi)部數(shù)據(jù)匯流排返回1.539

1.5.28086寄存器組

寄存器是CPU內(nèi)部臨時(shí)存放數(shù)據(jù)的部件。

8個(gè)通用寄存器,4個(gè)段寄存器,1個(gè)指令指針寄存器,1個(gè)標(biāo)誌寄存器。以上寄存器均為16位寄存器。

1.8086通用寄存器(1)AX—累加器。(2)BX—基地址寄存器。(3)CX—計(jì)數(shù)寄存器。(4)DX—數(shù)據(jù)寄存器。(5)SI—源變址寄存器。(6)DI—目的變址寄存器。(7)BP—?;刂芳拇嫫?。(8)SP—棧頂指針。(9)IP——指令指針寄存器(專用寄存器)。

通用寄存器中的4個(gè)數(shù)據(jù)寄存器可以分成8個(gè)8位寄存器使用:AX→AH,ALBX→BH,BLCX→CH,CLDX→DH,DL40標(biāo)誌寄存器2.標(biāo)誌寄存器

標(biāo)誌寄存器又稱作程式狀態(tài)字(ProgramStatusWord,簡記作PSW),共16位,一般把每一位分別使用,8086/8088使用其中的9位,用於存放當(dāng)前程式執(zhí)行的狀況和運(yùn)算結(jié)果的特徵,各標(biāo)誌位的分佈如圖2.3所示。

D15d14d13d12d11d10d9d8

D7D6D5D4D3D2D1D0OFDFIFTFSFZFAFPFCF41標(biāo)誌寄存器

9個(gè)標(biāo)誌位可分為兩組:狀態(tài)標(biāo)誌(條件標(biāo)誌),記載算術(shù)運(yùn)算或者邏輯運(yùn)算結(jié)果的特徵;另一組是控制標(biāo)誌位,記載CPU當(dāng)前工作狀態(tài)(控制CPU執(zhí)行指令的方式),包括TF、IF、DF等3個(gè)標(biāo)誌位。1.狀態(tài)標(biāo)誌(條件標(biāo)誌)(1)CF——進(jìn)位標(biāo)誌。(2)ZF——零標(biāo)誌。(3)SF——符號標(biāo)誌。(4)OF——溢出標(biāo)誌。(設(shè)置,與CF的區(qū)別)(5)PF——奇偶標(biāo)誌。(低8位,偶數(shù)時(shí)為1)(6)AF——輔助進(jìn)位標(biāo)誌。

42控制標(biāo)誌位2.控制標(biāo)誌位(1)TF——單步中斷允許標(biāo)誌。(2)IF——外部可遮罩中斷允許標(biāo)誌。(3)DF——方向標(biāo)誌。返回1.5目錄43

1.5.3記憶體組織與段寄存器1.數(shù)據(jù)的存儲格式AFH5AH34H12H56H78H0006H0005H0004H0003H0002H0001H0000H地址位(bit)、位元組(Byte)、字:字長:一個(gè)字包含的位數(shù)…;8086,286,386….的字長;記憶體的基本單位,地址、內(nèi)容;字、雙字的存放:遵循低位元組占低地址,高位元組占高地址。字單元、雙字單元的地址。地址對齊字單元[0002h]=1234h雙字單元[0002H]=78561234H位元組單元[0002h]=34h內(nèi)容44記憶體的分段管理12.記憶體的分段管理①為何分段:8086的地址匯流排寬度為20位,尋址範(fàn)圍220=1MB,但一個(gè)地址寄存器只有16位,無法直接形成20位地址,故把1M空間分成許多“段”,用一個(gè)寄存器表示某段在1M空間內(nèi)的起始地址(段地址),用另一個(gè)寄存器表示表示段內(nèi)某單元相對本段起始地址的偏移地址。(用兩個(gè)16位寄存器形成20位地址)②地址的表示方法:段(基)地址:偏移地址為能用16位寄存器表示段的起始地址(xxxxxH),並不是任意一個(gè)單元的地址都能作段的起始地址,只有那些形式為xxxx0H的地址才能作段的起始地址,該起始地址存入16位寄存器時(shí),將0省略即可。偏移地址為16位,可直接放入16位寄存器。45分段管理2③邏輯地址和物理地址邏輯地址:存儲單元地址的表達(dá)形式。即段地址:偏移地址物理地址:存儲單元在1M空間內(nèi)的實(shí)際地址。④已知邏輯地址,求物理地址如205AH:3B06H205A0H+3B06H————————240A6H①段地址乘以16(也就是將保存段地址時(shí)省略的0補(bǔ)回。)②位對齊,加偏移地址物理地址46分段管理3⑤地址的唯一性一個(gè)存儲單元的物理地址是唯一的,但邏輯地址並不是唯一的,例如4106H:400AH,42AEH:258AH,3507H:0FFFAH……都表示同一個(gè)存儲單元,其物理地址為4506AH。⑥涉及分段的其他問題

a)1M記憶體空間總共可以分多少個(gè)段?xxxx0hb)每個(gè)段最大可以包括多少個(gè)存儲單元?

c)xxxxH:0000H是段內(nèi)哪一個(gè)單元?其物理地址是多少?47

3.段寄存器8086專門存放段地址的寄存器稱為段寄存器,共有4個(gè):CS-代碼段段寄存器;

DS-數(shù)據(jù)段段寄存器;

ES-附加段段寄存器;

SS-堆疊段段寄存器。①段寄存器的作用:程式的不同部分放入相應(yīng)段;②段超越:取指令時(shí),段地址只能是CS;堆疊操作時(shí),段地址只能是SS;讀取數(shù)據(jù)時(shí),默認(rèn)的段寄存器為DS,但也可以指定使用其他段寄存器。48段寄存器使用規(guī)定SSESDSDSSSCS

默認(rèn)段寄存器有效地址EADISI有效地址EASPIP偏移地址CS,ES,SS無CS,ES,SSCS,ES,SS無無可超越的段寄存器BP作基址時(shí)串的目的運(yùn)算元串的源運(yùn)算元一般數(shù)據(jù)訪問堆疊操作取指令訪問存儲方式注意:雖然有些操作允許段超越,但除了編寫COM程式,一般情況下不使用段超越,特別是堆疊段只用於堆疊操作。

段寄存器使用規(guī)定49③使用段寄存器涉及的其他問題③使用段寄存器涉及的其他問題按前述,可以使用的段寄存器只有4個(gè),且每個(gè)段最大空間為64KB,好象限制很死,但實(shí)際使用時(shí)卻很靈活:程式可以只有一個(gè)代碼段(COM程式)。段與段之間可以相互獨(dú)立,也可以相互重疊,取決於各段的大小。如果必要,一個(gè)段的實(shí)際容量可以大於64K,只要在程式運(yùn)行時(shí),動態(tài)修改相應(yīng)段寄存器的值(程式有多個(gè)代碼段或多個(gè)數(shù)據(jù)段)。......64K64K段寄存器指向修改段寄存器值使其指向新地址段大於64K示意圖返回1.5501.68086的尋址方式1.6.18086機(jī)器代碼格式1.6.2立即數(shù)尋址方式1.6.3寄存器尋址方式1.6.4記憶體尋址方式寄存器間接尋址寄存器相對尋址基址變址尋址直接尋址基址變址相對尋址返回第一章51

1.6.18086機(jī)器代碼格式①指令的組成(機(jī)器指令角度):操作碼運(yùn)算元(二進(jìn)位代碼的排列組合)(運(yùn)算元:無,1,2)②彙編指令格式:操作碼助記符目的運(yùn)算元,源運(yùn)算元;注釋操作碼助記符:每條指令必有。運(yùn)算元:指令操作的對象或操作對象的地址。

MOV AX,2050HMOV AX,[2050H](詳細(xì)的機(jī)器指令格式省略)返回1.652

1.6.2立即數(shù)尋址方式尋址方式:尋找運(yùn)算元地址的方式,即尋找運(yùn)算元,而後完成指令。這種尋址方式直接把參與操作的數(shù)據(jù)寫在指令中,是指令的一部分,該數(shù)據(jù)稱為立即數(shù)。電腦尋找運(yùn)算元時(shí),只要讀取指令的運(yùn)算元位元組;運(yùn)算元可以是各種數(shù)制下的數(shù)值(相當(dāng)於8位或16位二進(jìn)位數(shù)),也可以是帶單引號的字元。例如:MOV AX,2050H MOV AL,05H MOV AL,‘A’B8H50H20H操作碼立即數(shù)53指令舉例觀察指令:MOV 05H,ALMOV BL,324DMOV CH,2050HMOV DL,‘25’注意:1.立即數(shù)永遠(yuǎn)不能作目的運(yùn)算元。

2.源運(yùn)算元和目的運(yùn)算元要互相匹配。返回1.6目錄54

1.6.3寄存器尋址執(zhí)行速度最快的尋址方式。MOV AX,BXMOV SP,AXMOV DI,2050HMOV DL,CH錯(cuò)誤指令:MOV AL,BXMOV SP,CH返回1.6目錄55

1.6.4記憶體尋址方式程式運(yùn)行時(shí)用到的數(shù)據(jù)決大部分存放在記憶體中,如何尋找記憶體中的數(shù)據(jù)就是記憶體尋址方式。共5種。1.直接尋址這種尋址方式是在指令中直接規(guī)定運(yùn)算元所在單元的偏移地址。(在組合語言中,這個(gè)偏移地址通常以變數(shù)的形式出現(xiàn),在指令中就直接寫變數(shù)的名字。)MOVAX,[2050H];AX←[DS×16+2050H]MOVDX,ES:[2050H];使用段超越;DX ←[ES×16+2050H]段超越指令格式區(qū)別MOVAX,2050H56直接尋址方式示意圖(MOVAX,[2050H])1492HDS14920H+2050H────16970H20H50HA1H...AAH55H代碼段數(shù)據(jù)段操作碼偏移地址16970HAHAL×16執(zhí)行結(jié)果AX=55AAH572.寄存器間接尋址偏移地址(或有效地址)通過寄存器間接給出,可用的寄存器為BX、BP、SI、DI。MOVAX,[BX];AX←[DS×16+BX]MOVAL,[BX];AL←[DS×16+BX]MOVAX,[SI];SI←[DS×16+SI]MOVAX,[DI];AX←[DS×16+DI]MOVAX,[BP];AX←[SS×16+BP]MOVAX,ES:[BX];AX←[ES×16+BX]MOVAX,DS:[BP];AX←[DS×16+BP]字操作位元組操作段寄存器使用SS段超越583.寄存器相對尋址

指令規(guī)定一個(gè)寄存器和一個(gè)有符號的8位或16位偏移量,有效地址等於寄存器內(nèi)容加偏移量。可用的寄存器仍然是BX、BP、SI、DI。計(jì)算物理地址時(shí),當(dāng)指令規(guī)定的寄存器是BP時(shí),默認(rèn)的段寄存器用SS,其他三個(gè)寄存器用DS;可以段超越。MOVAX,[DI+06H];AX←[DS×16+DI+06]MOVAX,06H[DI];同上MOVCL,[BP+0205H];CL←[SS×16+BP+205H]MOVDX,205H[BP];同上,但是是字操作。594.基址變址尋址用一個(gè)基址寄存器與一個(gè)變址寄存器的值相加,計(jì)算結(jié)果作為運(yùn)算元的偏移地址?;芳拇嫫髋c變址寄存器的搭配如下:BXSIBPDIMOVAX,[BX+SI];AX←[DS*16+BX+SI]MOVAX,[BP+DI];AX←[SS*16+BP+DI]MOVAX,[BP][DI];另一種寫法。注意:①允許段超越。

②[BX+BP]或[SI+DI]是非法搭配。605.基址變址相對尋址在基址變址尋址方式基礎(chǔ)上,增加一個(gè)8位或16位偏移量,三者之和為偏移地址。MOVAX,[BX+SI+06];AX←[DS×16+BX+SI+06]MOVAX,2050H[BP+SI];AX←[SS*16+………]備註:①在直接尋址中,地址可以用符號代替,如“MOVAX,WORD_ADDR”,相當(dāng)於“MOVAX,[xxxxH]”,“WORD_ADDR”稱為變數(shù)或符號地址,第三章介紹。②偏移量可以是變數(shù)或符號數(shù),也在第三章介紹。③如果一條指令有兩個(gè)運(yùn)算元,源運(yùn)算元和目的運(yùn)算元的尋址方式可能相同,也可能不同,如指令“MOVAX,[BX]”,源運(yùn)算元為寄存器間接尋址,目的運(yùn)算元為寄存器尋址。61講解指令系統(tǒng)時(shí)使用的符號r8:8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DLr16:16位通用寄存器AX/BX/CX/DX/SI/DI/BP/SPreg:代表r8或r16seg:段寄存器CS/DS/ES/SSm8:記憶體中的一個(gè)8位運(yùn)算元(含5種尋址方式)m16:記憶體中的一個(gè)16位運(yùn)算元(含5種尋址方式)mem:代表m8或m16imm:8位或16位立即數(shù)dest:目的運(yùn)算元src:源運(yùn)算元disp:代表8位或16位偏移量62mem運(yùn)算元的各種形式

①[2050H];VAR_ADDR②[BX];[BP];[si];[di]③[BX+disp];[BP+disp];[si+disp];[di+disp]disp[BX];disp[BP];disp[SI];disp[DI]④[BX+SI];[BX+DI];[BP+SI];[BP+DI][BX][SI];[BX][DI];……⑤[BX+SI+disp];[BX+DI+disp];[BP+SI+disp];[BP+DI+disp];其他寫法disp[bx+si]disp[bx][si]63要點(diǎn)及習(xí)題分析:㈠本章要點(diǎn)1.數(shù)制:二進(jìn)位數(shù)、十六進(jìn)制數(shù)及其相互轉(zhuǎn)換。2.有符號數(shù)的表示方法:原碼、反碼、補(bǔ)數(shù)。3.8086寄存器組:通用寄存器、專用寄存器、狀態(tài)標(biāo)誌的設(shè)置及含義。4.記憶體管理:分段、邏輯地址和物理地址、段寄存器、段超越。5.8086尋址方式:7種方式特別是對記憶體運(yùn)算元的5種尋址方式,也就是尋址mem數(shù)的各種表達(dá)形式。返回第一章

64㈡習(xí)題分析1.5將下列十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)位數(shù)和十進(jìn)位數(shù)。

①0FFH④0EFH⑥10H⑧0ABH1.6將下列十進(jìn)位數(shù)轉(zhuǎn)換為BCD碼。

②24④68⑥255⑧24581.7將下列BCD碼轉(zhuǎn)換為十進(jìn)位數(shù)。

①10010001③00110110⑤00001000⑦100000011.8將下列十進(jìn)位數(shù)分別用8位二進(jìn)位數(shù)的原碼、反碼和補(bǔ)數(shù)表示。

②-127④-57⑥-128⑧68651.10寫出0—9,A—Z,a—z以及回車和換行的ASCII碼。

1.11電腦中有一個(gè)“01100001”編碼,如果把它認(rèn)為是無符號數(shù),它是十進(jìn)位何數(shù)?認(rèn)為它是BCD碼,是十進(jìn)位何數(shù)?認(rèn)為它是ASCII碼,表示什麼字元?

1.15羅列8086的8個(gè)8位寄存器和16位寄存器,並說明各自的作用。

1.16狀態(tài)標(biāo)誌和控制標(biāo)誌有何區(qū)別?

1.17舉例說明CF和OF的區(qū)別。

1.18什麼是“小端方式”?對字和雙字存儲單元,什麼是它們的對齊地址?為什麼要對齊地址?

1.19將下列邏輯地址轉(zhuǎn)換成物理地址。

①0FFFF:0④0B821:4567

補(bǔ)充題:設(shè)物理地址為96FF8H,偏移地址任意,則段地址可取:①8600H②8800H③900H④96FFH⑤9700H66概述概述①8086的指令系統(tǒng)按功能分類可以分成六組,本章分類逐條講解。②在組合語言中,指令的一般格式為[標(biāo)號:]指令助記符目的運(yùn)算元,源運(yùn)算元[:注釋]其中括弧括起的部分不是必需的,為可選項(xiàng)?!皹?biāo)號”在第三章詳細(xì)介紹。③後面講解指令時(shí),除前一章介紹的符號外,本書用AX,BX…形式表示寄存器的內(nèi)容。④學(xué)習(xí)一條指令應(yīng)掌握的內(nèi)容:指令的功能運(yùn)算元的尋址方式指令對標(biāo)誌的影響避免非法指令…返回第二章672.1節(jié)目錄2.1.1--2.1.5(傳送)2.1數(shù)據(jù)傳送指令

2.1.1通用數(shù)據(jù)傳送指令

MOV/XCHG/XLAT

2.1.2堆疊操作指令

PUSH/POP

2.1.3標(biāo)誌傳送指令

LAHF/SAHF/PUSHF/POPF

2.1.4地址傳送指令

LEA/LDS/LES

2.1.5輸入輸出指令

IN/OUT返回第二章682.1.1目錄:1~32.1.1通用數(shù)據(jù)傳送指令

1.MOV類指令MOVreg/mem,imm;MOVseg/reg/mem,reg;MOVseg/reg,mem;MOVreg/mem,seg

2.交換指令XCHG

3.換碼指令XLAT2.1節(jié)目錄692.1.1-1mov類例1

1.MOV類指令

格式1:MOVreg/mem,immMOVAX,2050H/MOVCL,58HMOVBYTEPTR[BX],55H/MOVWORDPTR[BX],55HMOVBYTEPTR[SI+05],55HMOVBYTIPTR[BP+DI],55HMOVBYTEPTR[BX+DI+2000H],55HMOVBYTEPTR[4050H],55H

………①M(fèi)OV55H,AL②MOVDH,385③MOVBX,55H√④MOV[BX],55H⑤MOVDS,2000HMOVBYTEPTR[BX],55HMOVWORDPTR[BX],55H70mov類例2

格式2:MOVseg/reg/mem,regMOVDS,AX/MOVES,AX/MOVSS,AXMOVAX,BX/MOVSP,AX/MOVDH,CL/MOVAL,BHMOV[2050H],AX/MOV[2050H],BLMOV[BX+SI+2000H],DX/MOV2005H[BP][DI],CL

……………MOVDS,AL/MOVCS,AXMOVDL,AX/MOVBX,CL/MOVSI,CH/MOVBL,DI

CS不能做目的運(yùn)算元71mov類例3

格式3:MOVseg/reg,memMOVDS,[BX]/MOVES,[BP+SI+25H]MOVAX,[2050H]/MOVAL,[2050H]

……………

注意:MOVmem,mem形式的指令是非法指令,也就是說,如果一條指令有兩個(gè)運(yùn)算元,不允許兩個(gè)運(yùn)算元都是記憶體數(shù),如下列指令為非法指令:

MOV[BX],[2050H]/MOV[2050H],[BX+SI]

該項(xiàng)規(guī)定不僅適用於“MOV”類指令,也適用於其他各類指令(串操作除外)。記住:CS不能作目的操作數(shù)72mov類例4(END)

格式4:MOVreg/mem,segMOVAX,DS/MOVBX,ES/MOVAX,CSMOV[SI],DS/MOV[BX+SI],CS

……………“MOV”類指令小結(jié):①立即數(shù)只能作源運(yùn)算元,且要與目的運(yùn)算元匹配。

②兩個(gè)運(yùn)算元類型要匹配。

③如組合語言程式無法確定操作類型,要加類型說明符。

④CS一般不能作目的運(yùn)算元(用轉(zhuǎn)移指令改變)。

⑤如果指令有兩個(gè)運(yùn)算元,不允許兩個(gè)都是記憶體數(shù)。

⑥上述四類格式以外的指令必定是非法指令。

⑦所有“MOV”類指令均不影響標(biāo)誌。CS可以作源運(yùn)算元返回2.1.1MOV[BX],[2050H]732.1.1-2.xchg--3.XLAT

2.交換指令XCHG

指令格式:XCHGreg/mem,reg/mem

;將運(yùn)算元格式“mem,mem”

排除在外!例:XCHGAX,BX/XCHGDH,CLXCHGCX,[2000H]/XCHG[BX+SI],AL交換指令不影響標(biāo)誌。

3.換碼指令XLAT

指令格式:XLAT;AL←[DS×16+BX+AL]該指令的運(yùn)算元是隱含的(AL),且尋址方式可理解為寄存器相對尋址,偏移量在AL中。該指令又稱“查表指令”,通常用於編寫查表程式。換碼指令不影響標(biāo)誌。74

查表示意圖(end)160904010025查表步驟(求某數(shù)的平方)①在內(nèi)存中建立數(shù)據(jù)表格;②將表格的首地址送入BX中;③假定要求“3”的平方,將3送入寄存器AL中;④執(zhí)行指令XLAT;⑤執(zhí)行:AL←[BX+3](DS)執(zhí)行結(jié)束:AL=9。

AL中的內(nèi)容被“換碼”!表格首地址查表示意圖2.1節(jié)目錄××××H752.1.2堆疊操作指令(1)2.1.2堆疊操作指令

能夠?qū)崿F(xiàn)“後進(jìn)先出(先進(jìn)後出)的記憶體組織(或記憶體塊)稱為堆疊。引入堆疊:以三層副程式嵌套為例,逐級進(jìn)入副程式時(shí),A、B、C三點(diǎn)都有中斷點(diǎn)和現(xiàn)場需要保護(hù),順序?yàn)锳→B→C;當(dāng)副程式sub3執(zhí)行結(jié)束,逐級返回時(shí),ABCmainsub1sub2sub3最後被保護(hù)的C點(diǎn)數(shù)據(jù)應(yīng)最先恢復(fù),最先保護(hù)的A點(diǎn)數(shù)據(jù)應(yīng)最後恢復(fù)。為此,通常在內(nèi)存中開闢一段區(qū)域,結(jié)合軟硬體技術(shù),使其具有保護(hù)數(shù)據(jù)和後進(jìn)先出的功能。此為堆疊。76

堆疊操作指令(2)8086堆疊管理:8086使用段寄存器SS和指針寄存器SP管理堆疊,SS決定了堆疊區(qū)的首地址,SP的初始SS:0000HSS:SP堆疊區(qū)值決定了堆疊區(qū)的末地址,堆棧區(qū)的最大長度隨之而定。數(shù)據(jù)入棧時(shí),SP做減量調(diào)整,SP指示的單元稱為“棧頂”,即棧頂向下延伸;SP永遠(yuǎn)指向剛剛?cè)霔5臄?shù)據(jù)。數(shù)據(jù)出棧時(shí),SP做增量調(diào)整,即棧頂向上延伸SP永遠(yuǎn)指向?qū)⒁鰲5臄?shù)據(jù)。數(shù)據(jù)入棧數(shù)據(jù)出棧入棧的數(shù)據(jù)全部出完,SP恢復(fù)初始值。77

堆疊操作指令(3)1.PUSHr16/m16/seg;“r16/m16/seg”作為源運(yùn)算元,堆棧中的存儲單元作為目的運(yùn)算元,指令操作如下:

①SP←SP-1,SS:[SP]←src高8位

②SP←SP-1,SS:[SP]←src低8位例1:PUSH[BX];(設(shè)DS:[BX]字單元數(shù)據(jù)為55AAH)xxHxxHxxHAAH55HxxHSS:[SP]指令執(zhí)行前指令執(zhí)行後SS:[SP]78

堆疊操作指令(4)2.POPr16/m16/seg;“r16/m16/seg”應(yīng)看作目的運(yùn)算元,堆疊中的單元看作源運(yùn)算元,指令操作如下:

①dest低8位←SS:[SP],SP←SP+1②dest高8位←SS:[SP],SP←SP+1

例2:POPBX;設(shè)接在例1後執(zhí)行。AAH55HxxHSS:[SP]指令執(zhí)行前AAH55HxxHSS:[SP]指令執(zhí)行後55AAHBX79

堆疊操作指令(5)(END)使用堆疊指令:①堆疊操作是字操作指令,不要寫出“PUSHAL”等。②在“POP”指令中,“POPCS”為非法指令。③堆疊中的數(shù)據(jù)彈出後,數(shù)據(jù)並沒有在堆疊中消失,

除非壓入新數(shù)據(jù),畫圖時(shí)注意。④堆疊操作指令不影響標(biāo)誌。④使用堆疊指令保護(hù)和恢復(fù)現(xiàn)場時(shí),要注意指令的排列順序,如:PUSHAXPUSHBXPUSHDS......POPDSPOPBXPOPAX2.1節(jié)目錄802.1.3標(biāo)誌傳送指令(1)2.1.3標(biāo)誌傳送指令

1.標(biāo)誌寄存器傳送

①LAHF

;AH←標(biāo)誌寄存器低8位,即SF/ZF/AF

;PF/CF送AH相應(yīng)位,不影響標(biāo)誌。

②SAHF

;標(biāo)誌寄存器低8位←AH,該條指令影;響前五個(gè)標(biāo)誌。

③PUSHF

;標(biāo)誌寄存器入棧,不影響標(biāo)誌。

④POPF

;標(biāo)誌寄存器←SS:[SP],SP←SP+2;;該指令影響標(biāo)誌。81

標(biāo)誌傳送指令(2)(end)2.標(biāo)誌位操作(1)CF標(biāo)誌★CLC;CF←0★STC;CF←1★CMC;CF←CF(2)DF標(biāo)誌(串操作指令使用)★CLD;DF←0★STD;DF←1(3)IF標(biāo)誌(控制可遮罩中斷能否被回應(yīng))★CLI;IF←0★STI;IF←1

注釋:對其他標(biāo)誌沒有提供直接修改的指令,但是如果必要,可以用前述的四條標(biāo)誌傳送指令結(jié)合邏輯運(yùn)算指令進(jìn)行修改。2.1節(jié)目錄822.1.4地址傳送指令(1)2.1.4地址傳送指令

1.有效地址傳送指令LEA

LEAr16,mem

;r16←mem所指單元的偏移地址例:設(shè)BX=0400H,SI=003CHLEABP,[2050h];執(zhí)行後BP=2050HLEABP,[SI];執(zhí)行後BP=003CHLEABX,[BX+SI];執(zhí)行後BX=043CHLEABX,[BX+SI+0F62H];執(zhí)行後BX=139EH備註:①指令中“r16”常用的寄存器是BX、BP、SI、DI。一般不使用其他寄存器。

②指令中源運(yùn)算元常用的是變數(shù)名,而不是上面例子中例舉的形式,如:LEABX,WORD_VAR。所以,本條指令常被描述為“取變數(shù)的偏移地址”,屬常用指令。83

地址傳送指令(2)

2.指針傳送指令LDS

LDSr16,mem

;r16←mem,DS←mem+2

操作:①按mem規(guī)定的尋址方式計(jì)算某單元物理地址。②按計(jì)算出的物理地址做雙字操作,即前一個(gè)字(偏移指針)送r16,高位字(段指針)送DS。例:設(shè)DS=400H,BX=100H,SI=200H,

[04300]=2050H,[04302H]=0500HLDSSI,[BX+SI]執(zhí)行後DS=0500H,SI=2050H

示意圖:LDSSI,[BX+SI]05H00H20H50H04000H0100H0200H+04300HDSx16BXSI04300HDSSI84

地址傳送指令(3)(end)3.指針傳送指令LES

LESr16,mem

;r16←mem,ES←mem+2操作解釋:基本與“LDS”指令相同,不同的是把段寄存器DS換成ES。

★其他問題:①“LEA”指令的作用為取偏移地址,要注意與“MOV”指令區(qū)別:設(shè)SI=2050H,DS:[2050H](DS:[SI])=55AAH

則“LEABX,[SI]”執(zhí)行後,BX=

“MOVBX,[SI]”執(zhí)行後,BX=②“LDS”的r16常用SI;“LES”中,r16常用DI。

③地址傳送指令不影響標(biāo)誌。2050H55AAH2.1節(jié)目錄852.1.5輸入輸出指令(1)2.1.5輸入輸出指令

1.輸入指令I(lǐng)NAL,i8;位元組輸入,AL←端口i8INAX,i8;字輸入,AL←端口i8,AH←端口i8+1INAL,DX;位元組輸入,AL←端口[DX]INAX,DX;字輸入,AL←端口[DX],AH←[DX+1]注釋:①“i8”從形式上來說是立即數(shù),實(shí)際上是端口地址,因而指令的尋址方式為直接尋址。②“MOV”指令中,直接尋址要加中括弧,輸入輸出指令不加。(MOVAL,[2000H];INAL,25H)③第三、四兩條指令為寄存器間接尋址,但對DX不加中括弧。(moval,[bx];inal,dx)86

輸入輸出指令(2)2.輸出指令OUTi8,AL;位元組輸出,端口i8←ALOUTi8,AX;字輸出,端口i8←AL,端口i8+1←AHOUTDX,AL;位元組輸出,端口[DX]←ALOUTDX,AX;字輸出,端口[DX]←AL,[DX+1]←AH

注釋:①輸入輸出指令從尋址方式來說分成兩種:直接尋址和寄存器DX間接尋址。如果要訪問的端口地址在0~255之間,既可以用直接尋址,也可以用DX間接尋址;如果要訪問的端口地址≥256,則只能用DX間接尋址。②另外,輸入輸出指令中可用的數(shù)據(jù)寄存器只能是AL和AX,其他寄存器不可使用。③不影響標(biāo)誌。87

輸入輸出指令(3)(end)

例題:(對錯(cuò)混合)

1.INAL,205H(×)7.MOVAX,55AAH2.INAX,20HMOVDX,3FCH3.INAL,25HOUT[DX],AX4.INAH,0FFH(×)8.MOVAH,865.MOVDX,2050HOUT25H,AH(×)OUTDX,AL9.INAL,25H6.MOVDX,2050HMOVBL,ALINBX,DX(×)INAL,36H(OUTDX,BX)(×)MOVBH,AL……

2.1節(jié)目錄882.2節(jié)目錄2.2.1--2.2.6(算術(shù))2.2算術(shù)運(yùn)算指令

2.2.1加法指令

ADD/ADC/INC

2.2.2減法指令

SUB/SBB/DEC/NEG/CMP

2.2.3乘法指令MUL/IMUL

2.2.4除法指令DIV/IDIV

2.2.5符號擴(kuò)展指令CBW/CWD

2.2.6十進(jìn)位調(diào)整指令

(BCD)/DAA/DAS/AAA/AAS/AAM/AAD返回第二章892.2.1加法指令(1)

2.2.1加法指令

1.ADDADDreg/mem,imm;dest←dest+srcADDreg/mem,reg/mem

;dest←dest+src

;排除運(yùn)算元:mem,mem2.ADC

指令格式同ADD;dest←dest+src+CF3.INC

INCreg/mem;reg/mem←reg/mem+190

加法指令(2)

注釋:

①加法指令對標(biāo)誌的影響:ADD和ADC指令對所有的6個(gè)狀態(tài)標(biāo)誌都有影響,INC指令不影響CF,影響其他五個(gè)標(biāo)誌。學(xué)習(xí)加減法指令要會設(shè)置標(biāo)誌、使用標(biāo)誌。

②加減法運(yùn)算要注意OF和CF的意義不同,用法不同。例題:(對錯(cuò)混排)

ADDAL,25HADDBYTEPTR[BX],05ADDAL,125HADDWORDPTR[BX],05ADDAX,2500HADD[BX],2050HADDAX,05ADDAL,BLADD[BX],05ADDCH,DL91

加法指令(3)ADDBH,CXADDAX,DXADDSI,BPADDBX,[BX+SI]ADDDX,[BX+DI]ADDAX,[BX+BP]ADDAX,[SI+DI]ADD[BP+DI+205H],ALADD[BP+SI],CXADD[BX],[SI+05H]

前面所有指令都可以換成ADC。對於多位元組加法,最低字節(jié)(字)可以用ADD,剩下的應(yīng)使用ADC。如(dxax)+(sidi)ADDAX,DI;低16位相加

ADCDX,SI;高16位相加+CFINC25HINCALINCCXINC[BX+SI]INCBYTEPTR[BX+SI]INCWOREPTR[BX+DI+25]92

加法指令(4)加法指令標(biāo)誌設(shè)置設(shè)AL=76HADDAL,65H01110110+01100101

———————11011011AL=0DBH,OF=1,SF=1,ZF=0AF=0,PF=0,CF=0OF=1:只對有符號數(shù)運(yùn)算有意義。看作有符號數(shù)是+118+101,應(yīng)等於+219,大於+127,因而溢出。

CF=0:只對無符號數(shù)運(yùn)算有意義。118+101=219,219<255,無進(jìn)位。93

加法指令5end加法指令OF設(shè)置方法:①(正+負(fù))或(負(fù)+正)永遠(yuǎn)不會溢出,OF=0。②正+正,結(jié)果為正(符號位為0),OF=0。結(jié)果為負(fù)(符號位為1),OF=1。③負(fù)+負(fù),結(jié)果為負(fù)(符號位為1),OF=0。結(jié)果為正(符號位為0),OF=1。計(jì)算0FCH+0FBH11111100+11111011

——————111110111看作有符號數(shù)運(yùn)算:(-4)+(-5)=(-9)∴OF=0看作無符號數(shù)運(yùn)算:252+251=503∴CF=1返回2.2942.2.2減法指令(1)

2.2.2減法指令

1.SUB

SUB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論