版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1侯彥利侯彥利吉林大學(xué)(j ln d xu)工學(xué)部計(jì)算機(jī)硬件基礎(chǔ)課程微機(jī)原理與接口技術(shù)共一百七十五頁2吉林大學(xué)工學(xué)部計(jì)算機(jī)硬件基礎(chǔ)課程微機(jī)(wi j)原理與接口技術(shù)侯彥利共一百七十五頁3第3章 8088/8086指令系統(tǒng)(zh ln x tn)3.1 概述3.2 8086指令系統(tǒng)的尋址方式3.3 指令系統(tǒng)學(xué)習(xí)目的與要求熟練掌握8086/8088 CPU的功能結(jié)構(gòu)以及內(nèi)存儲器的分段組織,對于學(xué)習(xí)匯編語言程序設(shè)計(jì)至關(guān)重要,甚至對全課程的學(xué)習(xí)都有很大的幫助。匯編語言雖然已不作為應(yīng)用軟件開發(fā)的主要編程語言,但用它編寫的程序能夠充分發(fā)揮硬件系統(tǒng)的特性(txng),時(shí)空效率高,在I/O接口、操作系統(tǒng)內(nèi)核、
2、實(shí)時(shí)控制系統(tǒng)的開發(fā)以及程序調(diào)試、加密解密等方面具有其他高級語言無法替代的作用。通過本章的學(xué)習(xí)和上機(jī)操作,要求理解8086/8088尋址方式與常用指令、熟悉匯編語言的基本指令。共一百七十五頁43.1.1 機(jī)器語言(j q y yn)與匯編語言機(jī)器語言由二進(jìn)制代碼組成。機(jī)器語言中的每一條稱為指令,計(jì)算機(jī)能夠識別的所有指令的集合稱為指令系統(tǒng)。指令是計(jì)算機(jī)能夠執(zhí)行的最小功能單位。機(jī)器語言程序就是(jish)由一條條的指令按一定順序組織起來的指令序列。計(jì)算機(jī)的CPU不同,指令系統(tǒng)也不同。共一百七十五頁5一條指令一般由操作碼和操作數(shù)兩部分組成。操作碼詳細(xì)地說明指令要執(zhí)行的操作,操作數(shù)是指令執(zhí)行時(shí)需要的數(shù)據(jù)
3、。 匯編語言是一種符號語言。用匯編語言編制的程序稱為匯編語言源程序,計(jì)算機(jī)不能直接識別執(zhí)行,必須翻譯成機(jī)器語言(j q y yn)程序。翻譯的過程稱為匯編,完成匯編工作的程序稱為匯編程序。匯編程序?qū)儆谙到y(tǒng)程序,是匯編語言的命令處理程序。計(jì)算機(jī)的CPU不同,匯編語言也不同。本章以8086CPU為主,介紹常用的匯編語言指令格式、尋址方式和用法。共一百七十五頁63.1.2 指令(zhlng)的基本構(gòu)成 指令的一般格式(g shi) 一條指令包含操作碼和操作數(shù)兩部分 。目的操作數(shù)源操作數(shù)操作碼12字節(jié)16字節(jié)共一百七十五頁7操作數(shù)可以有一個(gè)也可以有兩個(gè),還可以沒有。只有一個(gè)操作數(shù)的指令常稱為單操作數(shù)指
4、令,有兩個(gè)操作數(shù)的指令常稱為雙操作數(shù)指令。形式上無操作數(shù)的指令,通常操作數(shù)是隱含(yn hn)的。操作數(shù)有源操作數(shù)和目的操作數(shù)之分。 操作數(shù)的長度與指令的尋址方式有關(guān) 。共一百七十五頁82. 操作數(shù)類型(lixng)8086CPU指令的操作數(shù)有三種(sn zhn)類型:立即數(shù)、寄存器操作數(shù)和存儲器操作數(shù)。立即數(shù)操作數(shù)又稱為常數(shù),可以是數(shù)值型常數(shù)也可以是字符型常數(shù)。數(shù)值型常數(shù)可以是字節(jié)或字,可以是無符號數(shù)或有符號數(shù)。立即數(shù)在指令中只能作為源操作數(shù),不能作為目的操作數(shù)。8位數(shù)16位數(shù)無符號數(shù)00H0FFH(0255)0000H0FFFFH(065535)帶符號數(shù)80H7FH(-128+127)80
5、00H7FFFH(-32768+32767)共一百七十五頁9寄存器操作數(shù),8086CPU含有的8個(gè)16位的通用數(shù)據(jù)寄存器和4個(gè)段寄存器作為16位寄存器操作數(shù),還有8個(gè)8位寄存器操作數(shù)??刂萍拇嫫鱅P、Flags只在特定指令(zhlng)中作為操作數(shù)。寄存器操作數(shù)在指令中可以作為源操作數(shù)也可以作為目的操作數(shù),段寄存器CS除外,它只能作為源操作數(shù) 。個(gè)別指令將FLAGS作為操作數(shù)。共一百七十五頁10CS DS SS ES IP FLAGSAHALBLCLDLDHCHBHDXCXBXAXSPBPSIDI目的變址寄存器源變址寄存器基址指針寄存器堆棧指針寄存器通用寄存器通用寄存器中AX、BX、CX、DX
6、、SI、DI、BP、SP存放(cnfng)字操作數(shù);AH、AL、BH、BL、CH、CL、DH、DL存放字節(jié)操作數(shù);共一百七十五頁11存儲器操作數(shù):用內(nèi)存單元中的數(shù)據(jù)作為操作數(shù)。通常用內(nèi)存單元地址表明。存儲器操作數(shù)既可以作為源操作數(shù)也可以作為目的操作數(shù),但多數(shù)指令要求源和目的操作數(shù)不能同時(shí)為存儲器操作數(shù)。指令中的操作數(shù)如果是存儲器操作數(shù),通常指令指明(zhmng)存儲單元的地址或用某種方式指明(zhmng)存儲單元的地址。 操作數(shù)可以是1個(gè)字節(jié)或2個(gè)字節(jié)(字)甚至4個(gè)字節(jié)(雙字)。 共一百七十五頁12數(shù)據(jù)(shj)在內(nèi)存中以“高高低低”的原則存放,低字節(jié)存于低地址內(nèi)存中,高字節(jié)存于高地址內(nèi)存中。
7、存儲器操作數(shù)如果是多字節(jié),指令中指明的存儲單元地址通常是它的低地址或稱為首地址。如寄存器AX的內(nèi)容為6E53H,將它存入20000H中:20000H20001H20002H20003H01010011011011101001011011000011圖3-2 數(shù)據(jù)存放 6E 53共一百七十五頁133. 指令(zhlng)的書寫格式 標(biāo)號: 操作碼助記符 目的操作數(shù),源操作數(shù) ;注釋 GOON:MOV AX, BX;數(shù)據(jù)傳送共一百七十五頁14標(biāo)號是字母數(shù)字(shz)組合的符號,代表指令,是指令的地址用符號表示的地址。標(biāo)號后跟冒號“:”作為間隔符。標(biāo)號一般由字母開頭的字母數(shù)字組成,長度不超過31個(gè)字
8、符。不允許使用匯編語言中的保留字作標(biāo)號。操作碼助記符與操作數(shù)助記符之間至少應(yīng)有一個(gè)空格作為間隔符。如果指令有兩個(gè)操作數(shù),操作數(shù)之間以逗號“,”作為間隔符。操作數(shù)助記符與注釋之間用分號“;”作為間隔符??梢愿谥噶畹暮竺嬉部梢詥为?dú)一行,若注釋超過一行,則新行以分號“;”開頭。指令中的標(biāo)點(diǎn)符號應(yīng)為ACSII字符。共一百七十五頁15 3.2 8086CPU尋址方式(fngsh) 尋址方式,即獲得地址的方法,主要指獲得段內(nèi)偏移地址的方法,段基址常采用默認(rèn)方式獲得。8086CPU指令系統(tǒng)的尋址方式有兩類: (1)獲得指令中操作數(shù)地址的方法立即數(shù)操作數(shù)作為指令的一部分出現(xiàn)在指令中,隨著CPU取指令的動(dòng)作進(jìn)
9、入CPU內(nèi),不需要再尋址;寄存器操作數(shù)本就在CPU內(nèi)部,寄存器的符號就是地址;存儲器操作數(shù)在內(nèi)存中,指令只能給出內(nèi)存單元的偏移地址,而且這個(gè)地址常常并不是指令需要的操作數(shù)有效(yuxio)地址,要通過某種計(jì)算方法才能得到操作數(shù)的最終地址。這個(gè)過程稱為操作數(shù)尋址。匯編語言的尋址方式主要指的是存儲器操作數(shù)的尋址方式 共一百七十五頁16注意:存儲(cn ch)器操作數(shù)通常存儲(cn ch)在數(shù)據(jù)段、附加數(shù)據(jù)段或堆棧段,相應(yīng)的段基址由段寄存器DS、ES或SS提供。共一百七十五頁17(2)獲得要執(zhí)行的下一條指令的地址的方法。在正常情況下,每當(dāng)BIU取完一條指令,程序計(jì)數(shù)器IP自動(dòng)指向下一條,程序就按照指
10、令的先后順序(shnx)執(zhí)行。但當(dāng)程序執(zhí)行轉(zhuǎn)移指令或子程序調(diào)用指令時(shí),程序的執(zhí)行順序(shnx)必須按照指令的要求改變,這時(shí)需要尋找下一條指令的地址。這類尋址發(fā)生在程序代碼段內(nèi),由CS段寄存器提供段基址。這一類尋址方式只涉及轉(zhuǎn)移指令和子程序調(diào)用指令,在介紹相關(guān)指令時(shí)再詳細(xì)講解。共一百七十五頁181. 立即(lj)尋址操作數(shù)是立即數(shù),可以(ky)是8位或16位的二進(jìn)制數(shù),也可以是字符常數(shù)。 MOV AX, 2000H ;2000H是立即數(shù)操作數(shù) MOV AH, A ;A是字符常數(shù),等于41H ADD AL, 6;6是立即數(shù)操作數(shù)立即數(shù)作為操作數(shù),這個(gè)操作數(shù)的尋址方式稱為立即尋址,其實(shí)它不用尋址。
11、立即數(shù)操作數(shù)只能作源操作數(shù),不能作為目的操作數(shù)。 共一百七十五頁192. 直接(zhji)尋址操作數(shù)在內(nèi)存中,指令中直接給出操作數(shù)所在的內(nèi)存單元的偏移地址。可以是數(shù)值形式的地址,也可以是符號(fho)表示的地址-符號地址。例如: MOV BL, 2000H;偏移地址為2000H的內(nèi)存單元的內(nèi)容傳送給BL寄存器。方括號表示地址 。BL為8位的寄存器,決定了這條指令為8位的數(shù)據(jù)傳送指令 。共一百七十五頁20MOVBX, 3200H ;將偏移地址為3200H為首地址的連續(xù)兩個(gè)內(nèi)存(ni cn)單元的內(nèi)容傳送給BX寄存器。BX為16位的寄存器,決定了這條指令為16位的數(shù)據(jù)傳送指令 3200H3201H
12、3202H3203H11111000000000111001011011000011圖3-3 直接尋址共一百七十五頁21匯編語言中常常用一個(gè)符號代替數(shù)值,如BUFF代替3200H,則上述指令(zhlng)可寫為: MOV BX, BUFF;或?qū)憺?MOV BX, BUFFBUFF稱為符號地址,它的尋址方式仍為直接尋址方式。BUFF需要在程序開始處予以定義 。共一百七十五頁22匯編指令中存儲器操作數(shù)的地址都是邏輯地址,例如上面指令中的2000H和3200H,都是段內(nèi)偏移地址,它們的段基址由DS指明。在通常情況(qngkung)下,存儲器操作數(shù)的默認(rèn)在數(shù)據(jù)段,段基址在DS。在特殊說明的情況下,存儲
13、器操作數(shù)的段基址也可以替換為CS、ES或SS。共一百七十五頁238086對寄存器使用(shyng)的約定內(nèi)存訪問類型默認(rèn)段寄存器可指定段寄存器段內(nèi)偏移地址來源堆棧操作SS無SP源串DSES、SSSI目的串ES無DIBP用作基址尋址SSES、DS按尋址方式計(jì)算得到的有效地址一般數(shù)據(jù)存取DSES、SS按尋址方式計(jì)算得到的有效地址共一百七十五頁24MOV BL, 2000H ;將DS:2000H之內(nèi)容(nirng)送入BLMOVBX, 3200H ; 將DS:3200H之內(nèi)容送入BX 共一百七十五頁25MOV BX, 3200H 設(shè)DS=A000H,則:A000H*10H+3200H=A3200H功
14、能(gngnng):將A3200H之內(nèi)容送入AL將A3201H之內(nèi)容送入AH1001101101110101A3200HA3201H數(shù)據(jù)段BLBH共一百七十五頁26如果操作數(shù)的段基址(j zh)不是DS段,指令中要特別說明。例如在ES段,指令應(yīng)書寫為: MOV BX, ES:3200H這種用法稱為段超越,物理地址為ESX10H+3200H。 段超越(choyu)符共一百七十五頁273. 寄存器尋址(Register Addressing)操作數(shù)在CPU內(nèi)部(nib)的寄存器中,例如:MOV 2000H ,BL;操作數(shù)BL為寄存器尋址。ADD AX, BX;源和目的操作數(shù)的都是寄存器尋址。再如:
15、 MOV AL,BL MOV AX,DXMOV DS,AX MOV SI,BP共一百七十五頁284. 寄存器間接(jin ji)尋址操作數(shù)在內(nèi)存中,內(nèi)存單元的偏移地址存放在寄存器中。 MOV AX, SI;操作數(shù)SI的尋址方式為寄存器間接尋址 ;SI的內(nèi)容為內(nèi)存單元的偏移地址,DS為段基址,以DSX10H+SI為首地址,取出連續(xù)兩個(gè)內(nèi)存單元的數(shù)據(jù)傳送(chun sn)給AX。如果DS=2000,SI=02H,指令的執(zhí)行結(jié)果為AX=C396H 20000H20001H20002H20003H01010011011011101001011011000011圖3-4 數(shù)據(jù)存放共一百七十五頁29再如:
16、MOV DX, DI;將DS:DI指明的連續(xù)兩個(gè)內(nèi)存單元的數(shù)據(jù)(shj)傳送到DXMOV BX, AX;AX的內(nèi)容傳送到DS:BX指明的連續(xù)兩個(gè)內(nèi)存單元中MOV CX, BP;將SS:BP指明的連續(xù)兩個(gè)內(nèi)存單元的數(shù)據(jù)傳送到CX為什么是SS呢? 共一百七十五頁308086CPU中能夠作為寄存器間接尋址方式使用的寄存器只有4個(gè):BX、BP、SI、DI。這4個(gè)寄存器在作為間接尋址使用時(shí),要用 申明,這時(shí)常稱為它們?yōu)榈刂分羔樆蜷g址寄存器。BP在作為間址寄存器時(shí),段基址默認(rèn)為SS;其它3個(gè)的默認(rèn)段基址為DS。都可以段超越。例如:MOV DX, ES:DI上述指令的功能為:從物理地址為ESX10H+DI的
17、內(nèi)存(ni cn)單元取出兩個(gè)字節(jié)的數(shù)據(jù)傳送給DX。共一百七十五頁315. 寄存器相對(xingdu)尋址操作數(shù)在內(nèi)存中,內(nèi)存單元的偏移地址一部分由間接尋址寄存器提供,一部分是指令給定的8位或16位地址位移量,二者相加形成操作數(shù)的有效地址。例如:MOV AX, BX+DATA ;將以BX+DATA為首(wishu)地址的連續(xù)兩個(gè)內(nèi)存單元的數(shù)據(jù)傳送給AX MOVAL, SI+20H MOV CX, DI+DATA MOV DX, BP+DATA共一百七十五頁32例:MOV AX,DATABX假設(shè):(DS)=6000H, (BX)=1000H, DATA=08H則內(nèi)存單元的物理地址為:60000H
18、+1000H+08H=61008H指令(zhlng)的執(zhí)行情況如下:操作碼08H00H665561008H碼段數(shù)據(jù)(shj)段AHAL(AX)=5566H共一百七十五頁33上述指令的書寫格式很靈活,也可以如下書寫:MOV AX, BX+DATAMOVAL, 20H SI MOV CX, DATA DIMOVDX, DATA+ BP 這種尋址方式(fngsh)可用于存取數(shù)據(jù)表中的數(shù)據(jù),用間址寄存器存放數(shù)據(jù)表首地址,地址位移量指明要存取表中的哪一個(gè)數(shù)據(jù),可以方便地存取數(shù)據(jù)表中的任何數(shù)據(jù)。共一百七十五頁34例:某數(shù)據(jù)表的首地址(偏移地址)為TABLE,要取出該表中第10個(gè)字節(jié)(z ji),并存放到A
19、L中,可用如下指令段實(shí)現(xiàn):MOV SI, 9MOV AL, TABLE+SI相對尋址指令的書寫格式允許有以下幾種:MOV AL, TABLESIMOV AL, SIDATAMOV AL, DATA+SIMOV AL, SI+DATAMOV AL, DATA+SIMOV AL, SI+DATA共一百七十五頁356. 基址(j zh)-變址尋址 操作數(shù)在內(nèi)存中,基址寄存器和變址寄存器相加作為操作數(shù)的偏移地址。 MOV AX, BXSI ;將BX+SI為首地址的連續(xù)兩個(gè)內(nèi)存單元的數(shù)據(jù)(shj)送給AX。MOV CX, BPDI ;將BP+DI為首地址的連續(xù)兩個(gè)內(nèi)存單元的數(shù)據(jù)送給CX。共一百七十五頁3
20、68086CPU中寄存器BX和BP為基址寄存器,SI和DI為變址寄存器。這種尋址方式中,一個(gè)基址寄存器加一個(gè)變址寄存器構(gòu)成操作數(shù),操作數(shù)的形式(xngsh)只有4種: BXSI BXDI BPSI BPDI MOV AX, BXBPMOV AX, SIDI共一百七十五頁37這種尋址方式里段基址(j zh)是DS還是SS呢?8086匯編規(guī)定以基地址為主,如果基址(j zh)寄存器為BP,則操作數(shù)的段基址默認(rèn)由SS提供;若BX為基址寄存器,則段基址默認(rèn)由DS提供。 MOV AX, BXDI;源操作數(shù)的物理地址為:DSX10H+BX+DI MOV BPSI, DX;目的操作數(shù)的物理地址為:SSX10
21、H+BP+SI基址變址尋址方式適用于處理一維數(shù)組,可將首地址存放在基址寄存器中,通過修改變址寄存器的內(nèi)容來訪問數(shù)組中的各個(gè)元素,它比寄存器相對尋址更加靈活。共一百七十五頁387、基址(j zh)-變址尋址相對尋址操作數(shù)在內(nèi)存中,操作數(shù)的地址由基址寄存器加上變址寄存器再加上地址位移量構(gòu)成。 MOV AX, DATABXSIMOV AX, BPDI DATA 假設(shè):(DS)=8000H, (BX)=2000H, (SI)=1000H, DATA=0200H則操作數(shù)DATABXSI的物理地址為:8000HX10H+2000H+1000H+0200H=83200H這種尋址方式主要用于二維數(shù)組操作。地址
22、位移量作為數(shù)組首地址,兩個(gè)寄存器分別作為行和列的地址指針(zhzhn),可以很方便實(shí)現(xiàn)數(shù)據(jù)陣列檢索 共一百七十五頁39基址-變址相對尋址指令的書寫格式允許有以下幾種(j zhn):MOV AX, DATASIBXMOV AX, BX+DATASI MOV AX, BX+DATA +SIMOV AX, BXDATASIMOV AX, BX+SIDATA下列指令是非法的:MOV AX, DI+SI+DATAMOV AX, BX+BP+DATA共一百七十五頁408、隱含尋址操作碼本身隱含地指明了操作數(shù)或部分(b fen)操作數(shù)的地址。如:MUL BL; ALXBL AX 共一百七十五頁41CPU的尋
23、址方式(fngsh)總結(jié):獲得操作數(shù)所在地址的尋址方式:立即(lj)尋址直接尋址寄存器尋址寄存器間接尋址寄存器相對尋址基址-變址尋址基址-變址相對尋址隱含尋址MOV AX, 3102HMOV AL, 4000H MOV AL,BL MOV AX,ES:SIMOV AX,SIMOV AX,DATABXMOV AX, BXSIMOV AX, DATADIBX MUL BL;共一百七十五頁428086指令系統(tǒng)(zh ln x tn)指令中常用的一些符號(fho)約定: OPRD各種類型的操作數(shù) src源操作數(shù) dst 目的操作數(shù) acc累加器AX或AL port輸入輸出端口 count計(jì)數(shù)器共一百七
24、十五頁433.3 8086/8088 CPU指令系統(tǒng)(zh ln x tn)指令系統(tǒng)分為六個(gè)功能(gngnng)組:1、數(shù)據(jù)傳送Data Transfer2、算術(shù)運(yùn)算Arithmetic3、邏輯運(yùn)算logic4、串操作string manipulation5、控制傳送control transfer6、處理器控制processor control 共一百七十五頁443.3.1 數(shù)據(jù)(shj)傳送類指令一般數(shù)據(jù)傳送MOV, PUSH, POP,XCHG, XLAT, CBW, CWD輸入輸出指令I(lǐng)N, OUT標(biāo)志傳送指令LAHF, SAHF, PUSHF, POPF地址傳送指令LEA, LDS,
25、 LES數(shù)據(jù)(shj)傳送指令細(xì)分為通用數(shù)據(jù)(shj)傳送指令、端口輸入輸出指令、地址傳送指令和標(biāo)志寄存器傳送指令。 共一百七十五頁451. 通用數(shù)據(jù)(shj)傳送指令MOV,PUSH,POP,XCHG,XLAT(1)MOV指令格式(g shi):MOV dst, src立即數(shù)到通用寄存器的數(shù)據(jù)傳送 MOV AL, 4;AL=4MOV AX, 1000H;AX=1000HMOV SI, 037BH;SI=037BH共一百七十五頁46但是:MOV DS, 2000H;語法錯(cuò)誤,不能用立即(lj) 數(shù)給段寄存器賦值。應(yīng)該為:MOVAX, 2000 MOV DS, AX共一百七十五頁47立即數(shù)到存儲
26、單元的數(shù)據(jù)傳送 MOV WORD PTRDI, 2000H將立即數(shù)2000H傳送到內(nèi)存單元,內(nèi)存單元的地址(dzh)以間接尋址的方式由DI提供。設(shè)DS=3000H,DI=1500H,目的操作數(shù)的物理首地址為31500H31500H31501H31502H31503H00000000001000001001011011000011圖3-5 數(shù)據(jù)傳送共一百七十五頁48PTR是屬性運(yùn)算符,功能為修改操作數(shù)的類型。WORD PTR的作用是將操作數(shù)的類型設(shè)置為字類型。BYTE PTR將操作數(shù)的類型設(shè)置為字節(jié)類型。例如:MOV BYTE PTRSI, 4AH將立即數(shù)4AH傳送到內(nèi)存單元,內(nèi)存單元的地址以間
27、接尋址的方式由SI提供(tgng),傳送一個(gè)字節(jié)。共一百七十五頁49 MOVDI, 04AH;語法錯(cuò)誤:源和目的操作數(shù)的類型都不確定。MOV指令中的兩個(gè)操作數(shù)的類型必須至少(zhsho)有一個(gè)是確定的,另一個(gè)依附這一個(gè)。屬性運(yùn)算符PTR幫助我們確定存儲器操作數(shù)的類型。 共一百七十五頁50CPU內(nèi)部(nib)寄存器之間的數(shù)據(jù)傳送 MOV AL, BL;BL傳送給AL,傳送一個(gè)字節(jié)。MOV AX, BX;BX傳送給AX,傳送一個(gè)字。MOVDS, AX;給數(shù)據(jù)段寄存器賦值。MOV SI, BP;BP傳送給SI,傳送一個(gè)字。共一百七十五頁51寄存器與存儲單元之間的數(shù)據(jù)傳送 MOV AL, 2000H
28、MOV AX, SI MOV 3200H, CX MOVARRYDI, DL MOV DL, BXSI注意(zh y):MOV指令的操作數(shù)可以使用各種尋址方式。共一百七十五頁52MOV CL,BPDI設(shè)(SS)=8000H ,(BP)=1020H ,(DI)=0383H 內(nèi)存(ni cn)單元 (813A3)=44H上面指令執(zhí)行后:則(CL)=44H共一百七十五頁53指令(zhlng)對操作數(shù)的要求:MOV指令的兩個(gè)操作數(shù)類型必須(bx)相同; MOV AX,BL 錯(cuò)誤!兩個(gè)操作數(shù)不能同時(shí)為存儲操作數(shù); MOV BX,SI 錯(cuò)誤!不能用立即數(shù)直接給段寄存器賦值; MOV DS,3000H 錯(cuò)誤
29、!兩個(gè)操作數(shù)不能同時(shí)為段寄存器; MOV DS, ES 錯(cuò)誤!MOV指令不能訪問IP和Flags;MOV指令不影響標(biāo)志寄存器的任何標(biāo)志位 ;不允許給CS賦值。 共一百七十五頁54MOV指令(zhlng)實(shí)現(xiàn)數(shù)據(jù)塊傳送例:把內(nèi)存(ni cn)中首地址為MEM1的200個(gè)字節(jié)送到首地址為MEM2的區(qū)域;MOV SI,OFFSET MEM1MOV DI,OFFSET MEM2MOV CX,200NEXT: MOV AL,SIMOV DI,ALINC SIINC DIDEC CXJNZ NEXTHLT37A45B4EMEM1MEM2共一百七十五頁55PUSH、POP指令(zhlng)堆棧是程序在內(nèi)存中
30、開辟的一個(gè)數(shù)據(jù)區(qū),用以保存寄存器或存儲器中暫時(shí)不用而又必須保存的數(shù)據(jù)。堆棧的段基址放在SS中,堆棧指針為SP;堆棧是一種線性表,只在棧頂(低地址(dzh)端)進(jìn)行輸入輸出操作。CPU對堆棧的操作采用先進(jìn)后出(或后進(jìn)先出)存取方法。CPU把數(shù)據(jù)存入堆棧稱為壓入堆棧PUSH,從堆棧中取出數(shù)據(jù)稱為彈出堆棧POP。 共一百七十五頁56PUSH、POP指令(zhlng)堆棧存取規(guī)則如下:每次存取一個(gè)字(16位);存放數(shù)據(jù)時(shí),從高地址向低地址; 讀取數(shù)據(jù)時(shí)正好相反;SP總是指向棧頂;壓入操作數(shù)時(shí) SP減2,彈出操作數(shù)SP加2;操作數(shù)不能是立即數(shù);后進(jìn)先出(LIFO)的原則;參數(shù)傳遞、子程序調(diào)用、中斷(zh
31、ngdun)響應(yīng)4E665A23SSSP500005FFFF堆棧增長方向堆棧段共一百七十五頁57例:PUSH AX設(shè)(AX)=1122H,SP=FFFE,SS=1000H 執(zhí)行(zhxng): SP-1 SP AH SPSP-1 SP AL SPSP=FFFCHAHALSS段SPSS堆棧(duzhn)段10000H1FFFFH552A共一百七十五頁58例:PUSH AXPUSH DI PUSH WORD PTR1000H PUSH WORD PTRSI PUSH WORD PTRBP+6 共一百七十五頁59POP AX執(zhí)行(zhxng)過程:SP ALSP+1 SPSP AHSP+1 SP22
32、11SS段AHALSPSS2211SS段SPSS共一百七十五頁60 例: POP SIPOP AXPOP WORD PTR1000HPOP WORD PTRSIPOP WORD PTRBX+DIPOP WORD PTRBX共一百七十五頁61MOV AX, 9000HMOV SS, AXMOV SP, 0E200HMOV DX, 38FFHPUSH DXPUSH AXPOP AXPOP DX0090FF38SS段9E200H90000H9E1FCH9E1FDH9E1FEH9E1FFH0090FF38SS段9E200H90000H9E1FCH9E1FDH9E1FEH9E1FFHAHALDHDL共一
33、百七十五頁62堆棧(duzhn)的作用主要用來存放寄存器或存儲器中暫時(shí)不用又必須保存的數(shù)據(jù)。如調(diào)用子程序或響應(yīng)(xingyng)中斷時(shí)保護(hù)斷點(diǎn)地址;堆棧操作數(shù)可以是16位通用寄存器、段寄存器、存儲器;PUSH和POP一般是成對出現(xiàn)的,且執(zhí)行順序相反,以保持堆棧原有的狀態(tài)。共一百七十五頁632. 輸入輸出(I/O)指令(zhlng)8086CPU對所有(suyu)輸入輸出端口統(tǒng)一管理,提供了一個(gè)與內(nèi)存儲器地址空間分開的、完全獨(dú)立的地址空間,I/O端口的地址有8位和16位兩種形式。8086CPU對I/O端口的管理與對內(nèi)存儲器的管理不同,輸入輸出指令中操作數(shù)的尋址方式也不同,是輸入輸出指令特有的。共
34、一百七十五頁642. 輸入輸出(I/O)指令(zhlng)只有累加器AL或AX可以與I/O端口進(jìn)行(jnxng)數(shù)據(jù)交換;所以也稱為累加器專用傳送指令。直接端口尋址方式:當(dāng)端口地址是8位的二進(jìn)制數(shù)時(shí),可以在指令中直接使用。如:OUT 25H, AL; IN AL,25H;OUT 25H, AX; IN AX,25H;寄存器間接尋址方式:當(dāng)端口地址為16位,不能直接使用,需要預(yù)先將其傳送到DX寄存器中,并且只能是DX作為間接尋址寄存器。如:MOV DX,03F8H; IN AL,DX; OUT DX,AL;IN AX,DX;OUT DX,AX; 共一百七十五頁65【例題3-2】從并行口0378H
35、輸出一個(gè)(y )字符A。 MOVDX, 0378H MOV AL, A OUT DX, AL共一百七十五頁663. 地址傳送(chun sn)指令LEA,LDS,LES 取有效地址指令LEA:LEA BX,BUFFER說明:源操作數(shù)必須是存儲器操作數(shù);目的(md)操作數(shù)必須是16位通用寄存器,通常是地址指針寄存器。如: LEA SI ,DATALEA DI ,EDATALEA BP ,SDATA共一百七十五頁67設(shè)BUFF為符號(fho)變量,比較下面兩條指令的功能: MOV DI, OFFSET BUFFLEA DI, BUFF上面兩條指令的功能完全相同,但LEA指令更簡潔。OFFSET為取
36、值運(yùn)算符,又稱為數(shù)值返回運(yùn)算符,用以求出變量或標(biāo)號的屬性值。常見的取值運(yùn)算符還有SEG。共一百七十五頁68SEG運(yùn)算符用以求出變量或標(biāo)號所在段的段基址。 例如: MOV AX, SEG BUFF;BUFF的段基址送AX。 MOV DS, AXOFFSET用以求出變量或標(biāo)號的偏移(pin y)地址。 例如: MOV SI, OFFSET BUFF;BUFF的偏移地址送AX。共一百七十五頁69例:設(shè)(BX)=1000H, (DS)=6000H, 內(nèi)存單元(61050H)=33H, (61051H)=44H;比較(bjio)一下兩條指令的執(zhí)行結(jié)果:LEA BX,BX+50HMOV BX,BX+50H
37、334461050H61051H44331050DS段共一百七十五頁70標(biāo)志(biozh)傳送指令標(biāo)志傳送指令共有4條:LAHF和SAHF,PUSHF和POPF; PUSHF ;將標(biāo)志寄存器FLAGS壓入堆棧; POPF ;將當(dāng)前棧頂?shù)膬?nèi)容彈出到標(biāo)志寄存器FLAGS這兩條指令常用在過程(guchng)調(diào)用時(shí)保護(hù)標(biāo)志位,調(diào)用結(jié)束時(shí)恢復(fù)標(biāo)志位;共一百七十五頁718088/8086CPU提供了加、減、乘、除4種基本算術(shù)運(yùn)算(yn sun)指令,可以實(shí)現(xiàn)二進(jìn)制數(shù)的運(yùn)算(yn sun)也可以實(shí)現(xiàn)十進(jìn)制數(shù)運(yùn)算(yn sun)??梢詫?shí)現(xiàn)字節(jié)運(yùn)算(yn sun)也可以實(shí)現(xiàn)字運(yùn)算(yn sun)??梢赃M(jìn)行有符號
38、數(shù)運(yùn)算(yn sun)也可以進(jìn)行無符號數(shù)運(yùn)算(yn sun),有符號數(shù)運(yùn)算(yn sun)以補(bǔ)碼形式進(jìn)行。這4種算術(shù)運(yùn)算指令都對標(biāo)志位產(chǎn)生影響。算術(shù)運(yùn)算指令應(yīng)盡量使用累加器作操作數(shù)。3.3.2 算術(shù)(sunsh)運(yùn)算指令共一百七十五頁72算術(shù)運(yùn)算加法指令A(yù)DD, ADC, INC減法指令SUB, SBB, DEC, NEG, CMP乘法指令MUL, IMUL除法指令DIV, IDIV十進(jìn)制調(diào)整指令DAA, AAA, DAS, AAS, AAM, AAD邏輯運(yùn)算和移位指令A(yù)ND, OR, NOT, XOR, TEST, SHL, SAL, SHR, ROL, ROR, RCL, RCR共一百七十
39、五頁73加法運(yùn)算指令 (1)不帶進(jìn)位(jnwi)的加法運(yùn)算指令A(yù)DD ADD AL, BL;AL+BL結(jié)果存回AL中。ADD AX, SI;AX+SI結(jié)果存回AX中。ADD BX, 3DFH;BX+03DFH結(jié)果存回BX中。ADD DX, DATABP+SI;DX與內(nèi)存單元相加,結(jié)果存回DX中ADDBYTE PTRDI, 30H ;內(nèi)存單元與30H相加,結(jié)果存回內(nèi)存單元中。ADD BX, AX;內(nèi)存單元SI與AX相加,結(jié)果存回SI中。ADDBX+SI, AL;內(nèi)存單元與AL相加,結(jié)果存回內(nèi)存單元中 共一百七十五頁74【例題3-3】求D9H與6EH的和,并注明受影響(yngxing)的標(biāo)志位狀態(tài)
40、。 1 1 0 1 1 0 0 1 + 0 1 1 0 1 1 1 0 1 0 1 0 0 0 1 1 1結(jié)果AL=47H,標(biāo)志位CF=1,PF=1,AF=1,ZF=0,SF=0,OF=0 MOV AL, 0D9HMOVBL, 6EHADDAL, BL共一百七十五頁75(2)帶進(jìn)位的加法(jif)運(yùn)算指令A(yù)DC例如: ADCAL, BLADC AX, BXADC DI, 30HADC指令主要用于多字節(jié)數(shù)的加法運(yùn)算,以保證低位向高位的進(jìn)位被正確接收。共一百七十五頁76【例題(lt)3-4】求3AD9FH與25BC6EH的和,結(jié)果存放在DX:AX中。MOV AX, 0AD9FH;AX=AD9FHM
41、OVBX, 0BC6EH;BX=BC6EHADDAX, BX;AX=6A0DH,CF=1MOVDX, 03H;DX=3ADCDX, 25H;DX=29H,結(jié)果DX:AX=296A0DH共一百七十五頁77(3)加1指令I(lǐng)NC加1指令又稱增量指令,指令不影響(yngxing)CF標(biāo)志位。例如: INC ALINCAXINCBYTE PTRSIINCWORD PTRBX+DI共一百七十五頁782. 減法運(yùn)算指令SUB,SBB,DEC,NEG,CMP(1)不帶借位(ji wi)CF的減法指令SUB例如:SUB AL, BL;AL-BL結(jié)果存回ALSUBCX, BX;CX-BX結(jié)果存回CXSUBDX,
42、SI;DX與SI內(nèi)存單元相減,結(jié)果存回DXSUBDATABX, CL;內(nèi)存單元的數(shù)減去CL結(jié)果存回內(nèi)存單元SUBBL, 2;BL-2結(jié)果在BL中。SUBWORD PTRBP+SI, 100H;內(nèi)存單元減去100H,結(jié)果存回內(nèi)存。共一百七十五頁79【例題3-5】求D9H與6EH相減,并注明受影響的標(biāo)志位狀態(tài)(zhungti)。 1 1 0 1 1 0 0 1 - 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 1結(jié)果AL=6BH,標(biāo)志位CF=0,PF=0,AF=1,ZF=0,SF=0,OF=1MOV AL, 0D9HMOVBL, 6EHSUBAL, BL共一百七十五頁80(2)帶借位
43、CF的減法指令SBB例如:SBBAL, 30H;AL-30H-CF結(jié)果(ji gu)存回ALSBBAX, BX;AX-BX-CF結(jié)果存回AXSBB DI, AH;DI內(nèi)存單元的數(shù)減去AH結(jié)果存回內(nèi)存單 元DI中共一百七十五頁81總結(jié)(zngji)加法、減法運(yùn)算指令會(huì)影響Flags的全部6個(gè)狀態(tài)標(biāo)志。單操作數(shù)指令的操作數(shù)不能為立即數(shù);雙操作數(shù)指令中立即數(shù)只能作為源操作數(shù);源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲器操作數(shù)不能對段寄存器進(jìn)行(jnxng)運(yùn)算。加減結(jié)果可能溢出;對標(biāo)志位產(chǎn)生影響;共一百七十五頁82(4)操作數(shù)求補(bǔ)指令NEG功能:(0-OPRD)即對OPRD包括符號位在內(nèi)逐位取反后加1,結(jié)果
44、回送到OPRD?!纠}3-6】 MOV AL,31H NEG AL;AL=CFH,標(biāo)志位CF=1,PF=1,AF=1,ZF=0,SF=1,OF=0如果操作數(shù)非0,指令的執(zhí)行使CF=1, 否則CF=0。對全部6個(gè)狀態(tài)標(biāo)志位產(chǎn)生(chnshng)影響。共一百七十五頁83(3)減1指令DECDEC指令又稱為減量指令,指令不影響CF標(biāo)志位,對其它(qt)5個(gè)狀態(tài)標(biāo)志位產(chǎn)生影響。 例如: DEC CXDECCLDEC BYTE PTR ARRAY+SI 共一百七十五頁84(5)比較指令CMPCMP OPRD1, OPRD2 OPRD1減去OPRD2,結(jié)果并不回送給OPRD1。指令影響全部6個(gè)狀態(tài)標(biāo)志位。
45、指令執(zhí)行后兩個(gè)操作數(shù)不變。這條指令后面常跟有條件轉(zhuǎn)移(zhuny)指令,利用CMP指令對Flags標(biāo)志位的影響,設(shè)定程序的執(zhí)行方向。 共一百七十五頁85例如(lr): CMPAL, AHCMPAX, BXCMPSI+DATA, AXCMPCL, 8CMPPOINTERBX, 100H共一百七十五頁86【例題3-7】從鍵盤輸入數(shù)據(jù)并判斷。MOV AH, 1INT 21H ;等待從鍵盤輸入一個(gè)字符,并存于AL中。CMP AL, 0 ;AL與0比較。JZ ZERO ;是0轉(zhuǎn)移(zhuny)到ZERO處繼續(xù)執(zhí)行。CMP AL, 1 ;如果不是0,是1嗎?JZ GOON ;是1轉(zhuǎn)移到GOON處執(zhí)行。.共
46、一百七十五頁873. 乘法指令MUL,IMUL乘法指令包括(boku)無符號數(shù)乘法指令MUL、有符號數(shù)乘法指令I(lǐng)MUL和乘法的十進(jìn)制調(diào)正指令A(yù)AM。8088/8086CPU乘法指令能實(shí)現(xiàn)字節(jié)乘法和字的乘法。字節(jié)乘法的乘積為16位存放在AX中,字的乘法的乘積為32位存放在DX:AX。指令的目的操作數(shù)采用隱含尋址方式。共一百七十五頁88(1)無符號數(shù)乘法指令MUL例如:MUL AH;ALAH 結(jié)果保存在AX中。MULBX;AXBX結(jié)果保存在DX:AX中。MULBYTE PTRSI;ALSI結(jié)果保存在AX中MULWORD PTRBX+DI;AXBX+DI結(jié)果保存在;DX:AX中。說明:兩個(gè)乘數(shù)的數(shù)據(jù)
47、類型要相同,指令影響標(biāo)志(biozh)位CF,OF位。字節(jié)相乘的乘積在AX中,如果標(biāo)志位CF=OF=1,表明AH不為0;字相乘的乘積在DX:AX中,如果標(biāo)志位CF=OF=1,表明乘積的高位DX不為0。共一百七十五頁89(2)有符號數(shù)乘法指令(zhlng)IMUL IMUL AH;ALAH 結(jié)果保存在AX中。IMULBX;AXBX結(jié)果保存在DX:AX中。IMUL BYTE PTRSI;ALSI結(jié)果保存在AX中。IMUL WORD PTRBX+DI 共一百七十五頁904. 除法指令DIV,IDIV,CBW,CWD,AAD除法指令隱含了被除數(shù)AX或DX:AX,除數(shù)可以是寄存器或存儲器操作數(shù),但不能是
48、立即數(shù)。被除數(shù)的字長要求是除數(shù)字(shz)長的兩倍,如果除數(shù)是字節(jié)類型,被除數(shù)必須是字類型而且要預(yù)置在AX中;如果除數(shù)為字類型,被除數(shù)必須是雙字類型而且要預(yù)置在DX:AX中。 共一百七十五頁91(1)無符號數(shù)除法指令DIV例如:DIV BL;商存到AL中,余數(shù)存到AH中DIVBXDIVBYTE PTRSIDIVWORD PTRDI ;商存到AX中,余數(shù)存到DX中。說明:在指令執(zhí)行前,必須檢查被除數(shù)的長度,如果不符合要求,要用位擴(kuò)展(kuzhn)指令來轉(zhuǎn)換。共一百七十五頁92(2)帶符號數(shù)的除法(chf)IDIV例如:MOV AL, 98HMOVBL, 13HCBW;將AL中的數(shù)據(jù)擴(kuò)展為16位。
49、IDIVBL結(jié)果AX=F7FBH,AL中的FBH為商,是負(fù)數(shù),AH中的F7H為余數(shù)。共一百七十五頁93(3)符號擴(kuò)展指令CBW,CWD使用符號擴(kuò)展指令對數(shù)據(jù)類型進(jìn)行調(diào)整。指令不影響標(biāo)志位。指令格式:CBW功能:字節(jié)轉(zhuǎn)換為字。將AL中的數(shù)的符號位擴(kuò)展至16位,擴(kuò)展的符號部分存入AH中,即由AL擴(kuò)展為AX,值保持(boch)不變。例如: MOV AL, 3EH;AL=0011 1110BCBW ;AX=0000 0000 0011 1110BMOV AL, 93HCBW ;AX=1111 1111 1001 0011B共一百七十五頁94指令格式:CWD功能:字轉(zhuǎn)換為雙字。將AX中的數(shù)的符號位擴(kuò)展至
50、32位,擴(kuò)展的符號部分(b fen)存入DX中。即由DX:AX代替AX,值保持不變。例如:MOV AX, 0C539H ;AX=1100 0101 0011 1001BCWD ;DX=FFFFH, AX=C539H共一百七十五頁953.3.3 邏輯運(yùn)算與移位指令1. 邏輯運(yùn)算指令(1)邏輯與指令A(yù)ND指令格式:ANDOPRD1, OPRD2例如:AND AL, 0FH;取AL的低4位,屏蔽高4位。ANDAX, BXAND SI, AL;內(nèi)存(ni cn)單元SI與AL與,結(jié)果存回內(nèi)存單元ANDDX, BX+SI共一百七十五頁96【例題3-8】AX與BX進(jìn)行與操作(cozu):MOV AX, 7
51、E6DHMOV BX, 0D563HANDAX, BX;AX=5461H, BX=0D563H將AL中的ASCII碼轉(zhuǎn)換為二進(jìn)制數(shù): MOV AL, 35HANDAL, 0FH;AL=5共一百七十五頁97如:想知道AL中的第5位的值,可以先安排如下一條指令(zhlng),使AL中的其它位都置為0,而只保留下第5位的值:ANDAL, 0010 0000B用與指令設(shè)置標(biāo)志位CF=OF=0:AND AX, AX;AX不變,CF=OF=0指令執(zhí)行使標(biāo)志位CF=OF=0,AF值不定,對SF、PF和ZF產(chǎn)生影響。 共一百七十五頁98(2)邏輯或指令OR例如:ORAX, CXORDI, ALORAL, 0F
52、H;AL的低4位被置1,高4位不變。 ORAL, 80H;AL的符號(fho)位置1,其它位保持不變再如:MOVAL, 73HMOV BL, 0CDHORAL, BL;AL=FFH,BL=CDH共一百七十五頁99例如: 要求置位AX中的B1B5B9位;?例如: 對AL進(jìn)行(jnxng)偶校驗(yàn):ORAL,ALJPECONTINUEORAL,80HCONTINUE:邏輯或指令常用于將某些位置1,其余位保持不變。指令執(zhí)行使標(biāo)志位CF=OF=0,AF值不定,對SF、PF和ZF產(chǎn)生影響。 共一百七十五頁100(3)邏輯非指令(zhlng)NOT指令格式:ANDOPRD功能:將OPRD逐位取反,結(jié)果回送O
53、PRD中。例如: MOV AL, 0FHNOTAL ;AL=F0HNOTBYTE PTRSI共一百七十五頁101(4)邏輯異或指令XOR指令格式:XOROPRD1, OPRD2功能:OPRD1與OPRD2按位進(jìn)行異或操作,結(jié)果回送OPRD1中。例如:XORAX, CXXORDI, 4AHXOR AX, AX;AX=0,同時(shí)標(biāo)志位CF=OF=0,這條指令常用于算術(shù)(sunsh)運(yùn)算指令之前清理運(yùn)算環(huán)境。共一百七十五頁102再如: MOVAL, 73HMOV BL, 0CDHXORAL, BL;AL=BEH,BL=CDH共一百七十五頁103(5)測試(csh)指令TEST指令格式:TEST OPR
54、D1, OPRD2功能:OPRD1與OPRD2按位進(jìn)行與操作,但是結(jié)果不回送OPRD1中,所以指令執(zhí)行后兩個(gè)操作數(shù)的值保持不變。指令的執(zhí)行使標(biāo)志寄存器的標(biāo)志位CF=OF=0,AF值不定,SF、PF和ZF受影響。通常ZF位最受關(guān)注。共一百七十五頁104例如:TESTAL, 04HTEST SI, 80H這條指令常用于對OPRD1中的特定位進(jìn)行測試,OPRD2用于說明(shumng)測試OPRD1中的哪一位。OPRD2的常見取值為01H、02H、04H、08H、10H、20H、40H和80H等等。例如測試AL的第0位, 可以安排如下一條指令:TESTAL, 01H指令執(zhí)行后AL的值保持不變,但標(biāo)志
55、位受到影響。如果ZF=0說明AL的第0位為1,如果ZF=1說明AL的第0位為0。共一百七十五頁1052. 移位指令移位指令分為非循環(huán)(xnhun)移位指令和循環(huán)(xnhun)移位指令兩類,各包括4條。 共一百七十五頁1064條非循環(huán)移位指令:算術(shù)左移指令(zhlng)SAL(shift arithmetic left)算術(shù)右移指令SAR(shift arithmetic right)邏輯左移指令SHL(shift logic left)邏輯右移指令SHR(shift logic right)例:SAL AL,1SHL AX ,1SAL AL,CLSHL AX ,CL說明:對寄存器操作數(shù)或內(nèi)存操
56、作數(shù)進(jìn)行指定次數(shù)的移位,移動(dòng)的次數(shù)放在CL中;共一百七十五頁107(1)邏輯左移指令(zhlng) SHL指令格式:SHLOPRD, COUNT說明:OPRD可以是寄存器或存儲器操作數(shù),COUNT可以為1或CL。例如: SHLAX, CLSHL BYTE PTRSI, 1共一百七十五頁108設(shè)指令(zhlng)執(zhí)行前AL=3AH SHL AL, 1共一百七十五頁109【例題3-9】MOV AL, 35HSHLAL, 1 ;AL=35H2=6AH, CF=0MOVBX, 78CDHMOV CL, 3SHLBX, CL;BX=C668H, CF=1,邏輯左移1位相當(dāng)于乘以2(二進(jìn)制的基數(shù)),邏輯右
57、移1次相當(dāng)于除以2,所以移位指令常用于簡單(jindn)的乘除運(yùn)算,它比一般的乘除指令節(jié)省CPU時(shí)間,但在使用過程中要注意溢出情況。邏輯左移或邏輯右移指令將操作數(shù)看作是無符號數(shù)。共一百七十五頁110(2)邏輯(lu j)右移指令 SHR如:SHR AX, CLSHR BX, CLSHR BYTE PTRSI, 1共一百七十五頁111【例題(lt)3-10】MOV AL, 0AHSHRAL, 1 ;AL=05, CF=0MOVBX, 78CDHMOV CL, 3SHRBX, CL;BX=0F19H, CF=1共一百七十五頁112(3)算術(shù)左移指令 SAL說明:算術(shù)左移指令與邏輯左移指令的功能相同
58、,但算術(shù)左移指令將操作數(shù)作為帶符號數(shù)處理(chl)。例如: SAL AL, 1SALAX, CLSAL BYTE PTRSI, 1SALDX, CL共一百七十五頁113(4)算術(shù)右移指令 SAR指令格式:SAROPRD, COUNT功能:將OPRD逐位進(jìn)行(jnxng)右移,最高位向右移到次高位,依次移動(dòng),第0位移出OPRD,移到標(biāo)志寄存器的CF中;最高位保持不變。共一百七十五頁114算術(shù)右移指令將操作數(shù)作為帶符號數(shù)處理,最高位在右移位過程中保持(boch)不變,是因?yàn)樗欠栁唬@也體現(xiàn)了補(bǔ)碼運(yùn)算的特點(diǎn)。算術(shù)右移一次相當(dāng)于除2。再如:SAR AX, CLSAR WORD PTRSI, 1SA
59、RDX, CL共一百七十五頁115算術(shù)左移指令(zhlng)SAL、邏輯左移指令SHL算術(shù)(sunsh)左移指令SAL將操作數(shù)視為有符號數(shù);邏輯左移指令SHL將操作數(shù)視為無符號數(shù),左移1位相當(dāng)于將該數(shù)乘2,左移n位相當(dāng)于該數(shù)乘2n共一百七十五頁116例30:把以DATA為首(wishu)址的兩個(gè)連續(xù)單元中的16位無符號數(shù)乘以10;LEA SI,DATAMOV AX,SISHL AX,1MOV BX,AXMOV CL,3MOV AX,SISHL AX,CLADD AX,BXHLTLEA SI,DATAMOV AX,SIMOV BX,10MUL BXHLT共一百七十五頁117循環(huán)(xnhun)移位
60、指令4條循環(huán)(xnhun)移位指令:不帶進(jìn)位標(biāo)志位CF的循環(huán)左移指令ROL不帶進(jìn)位標(biāo)志位CF的循環(huán)右移指令ROR帶進(jìn)位標(biāo)志位CF的循環(huán)左移指令RCL帶進(jìn)位標(biāo)志位CF的循環(huán)右移指令RCRCFCFCFCF共一百七十五頁118(1)不帶CF的循環(huán)(xnhun)移位指令 如: ROL AX, CLROL BYTE PTRSI, 1RORBX, 1ROR WORD PTRDI, CL共一百七十五頁119(2)帶CF的循環(huán)(xnhun)移位指令 如:RCLAX, CLRCL BYTE PTRSI, 1RCRBX, 1RCR WORD PTRDI, CL共一百七十五頁120【例題3-11】將32位數(shù)2F6E
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度城市民宿租賃合同示范文本2篇
- 礦井急救培訓(xùn)方案
- 二零二五版房屋收購與附帶家具家電合同6篇
- 路橋路面改造施工方案
- 二零二五版離婚程序指導(dǎo)及雙方自愿協(xié)議合同3篇
- 二零二五年度城市基礎(chǔ)設(shè)施建設(shè)外協(xié)合同申請與驗(yàn)收辦法3篇
- 二零二五版學(xué)生校外住宿安全協(xié)議與住宿合同違約賠償合同3篇
- 二零二五年度奢侈品退換貨標(biāo)準(zhǔn)協(xié)議模板3篇
- 銀行高層裝修方案
- 二零二五年度教育機(jī)構(gòu)校園裝修工程協(xié)議書2篇
- 2025年度車輛抵押借款合同模板(專業(yè)二手車交易平臺)
- 2025年人民教育出版社有限公司招聘筆試參考題庫含答案解析
- 康復(fù)醫(yī)學(xué)治療技術(shù)(士)復(fù)習(xí)題及答案
- 完整版100以內(nèi)加減法混合運(yùn)算4000道100
- 2024年產(chǎn)權(quán)管理部年終工作總結(jié)例文(3篇)
- 《血管性血友病》課件
- 高三日語一輪復(fù)習(xí)日語助詞「に」和「を」的全部用法課件
- 非ST段抬高型急性冠脈綜合征診斷和治療指南(2024)解讀
- 2024年安全員-C證考試題庫及答案(1000題)
- 煤礦機(jī)電設(shè)備檢修技術(shù)規(guī)范完整版
- 榆林200MWp并網(wǎng)光伏發(fā)電項(xiàng)目可行性研究報(bào)告
評論
0/150
提交評論