版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章第三章 8086指令系統(tǒng)指令系統(tǒng) 指令系統(tǒng)是微處理器(指令系統(tǒng)是微處理器(cpu)所能執(zhí)行的指令)所能執(zhí)行的指令的集合,它與微處理器有密切的聯(lián)系,不同的微處的集合,它與微處理器有密切的聯(lián)系,不同的微處理器有不同的指令系統(tǒng)。在本章中我們主要講解理器有不同的指令系統(tǒng)。在本章中我們主要講解intel公司生產(chǎn)的公司生產(chǎn)的8086/8088cpu的尋址方式以及各的尋址方式以及各種指令系統(tǒng),并通過具體實例講述了各條指令的功種指令系統(tǒng),并通過具體實例講述了各條指令的功能和使用方法。能和使用方法。通過本章的學(xué)習(xí),讀者應(yīng)該掌握以下內(nèi)容:通過本章的學(xué)習(xí),讀者應(yīng)該掌握以下內(nèi)容: 4種操作數(shù)的尋址方式種操作數(shù)的
2、尋址方式 常用指令的格式、功能、以及對標(biāo)志位的影響常用指令的格式、功能、以及對標(biāo)志位的影響 3.1 8086的尋址方式的尋址方式操作碼操作碼 操作數(shù)操作數(shù)操作碼:操作碼:指令操作類型;(必須有)指令操作類型;(必須有)操作數(shù):操作數(shù):指令所需操作數(shù)或操作數(shù)的地址;操作數(shù)可以指令所需操作數(shù)或操作數(shù)的地址;操作數(shù)可以有一個,也可以有兩個(一個源操作數(shù),一個目的操作有一個,也可以有兩個(一個源操作數(shù),一個目的操作數(shù)),也可以沒有。數(shù)),也可以沒有。例:例: mov ax,cx ;將;將cx的內(nèi)容送入的內(nèi)容送入ax中。中。 inc ax sti匯編指令的格式如下匯編指令的格式如下:一、一、 立即尋址方
3、式立即尋址方式指令操作數(shù)部分直接給出指令的操作數(shù),操作數(shù)與操作指令操作數(shù)部分直接給出指令的操作數(shù),操作數(shù)與操作碼一起存入代碼段中碼一起存入代碼段中。立即數(shù)有立即數(shù)有8位和位和16位。位。例例 :mov al,5 ;源操作數(shù)為立即尋址;源操作數(shù)為立即尋址指令執(zhí)行后,指令執(zhí)行后,al=05h,8位數(shù)據(jù)位數(shù)據(jù)05h存入存入al寄存器。寄存器。例例 :mov ax,3064h ;源操作數(shù)為立即尋址;源操作數(shù)為立即尋址指令執(zhí)行后,指令執(zhí)行后,ax=3064h,16位數(shù)據(jù)位數(shù)據(jù)3064h存入存入ax寄存寄存器。器。 注意:注意:立即數(shù)只能作源操作數(shù),不能作目的操作數(shù)。立即數(shù)只能作源操作數(shù),不能作目的操作數(shù)
4、。 以以a、b、c、d、e、f開頭的數(shù)字出現(xiàn)在指開頭的數(shù)字出現(xiàn)在指令中時,必須在前面加一個數(shù)字令中時,必須在前面加一個數(shù)字0。 立即數(shù)可以送到寄存器、存儲器中。立即數(shù)可以送到寄存器、存儲器中。例:下列指令是錯誤的。例:下列指令是錯誤的。 mov 2000h,ax mov al,b5h 而指令而指令mov 2000h,1234h是對的。是對的。二、二、 寄存器尋址方式寄存器尋址方式 寄存器尋址方式的操作數(shù)是寄存器的值,指令中寄存器尋址方式的操作數(shù)是寄存器的值,指令中直接使用寄存器名,包括直接使用寄存器名,包括8位或位或16位通用寄存器和段寄位通用寄存器和段寄存器。存器??墒褂玫目墒褂玫?6位寄存
5、器:位寄存器:ax、bx、cx、dx、si、di、sp、bp、cs、ds、es、ss;其中;其中ax、bx、cx、dx可分成兩個可分成兩個8位寄存器別使用。位寄存器別使用。例:例: mov ax,cx ;(;(ax) (cx) mov al,1 ;(;(al) 1注意:注意:cs不能作為目的操作數(shù),如不能作為目的操作數(shù),如mov cs,ax是錯誤的指令。是錯誤的指令。 源操作數(shù)必須與目的操作數(shù)相匹配。如源操作數(shù)必須與目的操作數(shù)相匹配。如 mov al,bx是錯誤的是錯誤的三、三、 存儲器尋址方式存儲器尋址方式 在存儲器尋址方式中,操作數(shù)是某個內(nèi)存單元的在存儲器尋址方式中,操作數(shù)是某個內(nèi)存單元的
6、內(nèi)容(值),指令中給出的是內(nèi)存單元的有效地址內(nèi)容(值),指令中給出的是內(nèi)存單元的有效地址ea(即偏移地址),段地址通常在隱含的某個段寄存器(即偏移地址),段地址通常在隱含的某個段寄存器中。由于內(nèi)存單元的地址的給出方式不同,存儲器尋中。由于內(nèi)存單元的地址的給出方式不同,存儲器尋址又可分為以下幾種尋址方式:直接尋址、寄存器間址又可分為以下幾種尋址方式:直接尋址、寄存器間址、寄存器相對尋址、基址變址尋址、基址變址相對址、寄存器相對尋址、基址變址尋址、基址變址相對尋址。尋址。1、直接尋址方式、直接尋址方式 形式:形式:mov ax,nn mov ax,x 在直接尋址方式中,操作數(shù)的偏移地址在直接尋址方
7、式中,操作數(shù)的偏移地址(有效地址有效地址ea)直接用指令加以指定直接用指令加以指定(有直接地址值和標(biāo)號兩種形有直接地址值和標(biāo)號兩種形式式),它存放在代碼段中指定操作碼之后,但操作數(shù)一,它存放在代碼段中指定操作碼之后,但操作數(shù)一般存放在存儲器的數(shù)據(jù)段中,所以必須先求出操作數(shù)的般存放在存儲器的數(shù)據(jù)段中,所以必須先求出操作數(shù)的物理地址,然后再訪問存儲器才能取得操作數(shù)。物理地址,然后再訪問存儲器才能取得操作數(shù)。段地址段地址隱含的由隱含的由ds 指定指定,也可以,也可以es指定,但需在指令中指明。指定,但需在指令中指明。最后存儲器地址為:最后存儲器地址為:ds:偏移地址偏移地址 或或 es:偏移地址。偏
8、移地址。例:例: mov ax,2000h 將將ds:2000h單元內(nèi)容送入單元內(nèi)容送入ax mov al,2000h 將將ds:2000h單元的內(nèi)容取一個字節(jié)送單元的內(nèi)容取一個字節(jié)送al例:例: mov ax,es:2000h 將將es:2000h單元中的內(nèi)容送入單元中的內(nèi)容送入ax mov al,x x必須是數(shù)據(jù)段中用必須是數(shù)據(jù)段中用db定義的變量定義的變量傳送原則:低地址的內(nèi)容(字節(jié))送寄存器的低位,高傳送原則:低地址的內(nèi)容(字節(jié))送寄存器的低位,高地址的內(nèi)容送寄存器的高位。地址的內(nèi)容送寄存器的高位。2、寄存器間接尋址、寄存器間接尋址寄存器間接尋址方式的操作數(shù)形式為:寄存器間接尋址方式的
9、操作數(shù)形式為:reg操作數(shù)的有效地址包含在基址寄存器操作數(shù)的有效地址包含在基址寄存器bx,基址指針,基址指針bp或一個變址寄存器(或一個變址寄存器(si或或di)中。寄存器間接尋址要)中。寄存器間接尋址要用方括號括起來,以便與寄存器操作數(shù)相區(qū)別。用方括號括起來,以便與寄存器操作數(shù)相區(qū)別。例:例: mov ax,bx;將由;將由bx決定的存儲單元的內(nèi)決定的存儲單元的內(nèi)容送到容送到ax寄存器。寄存器。0000000100020003bbaatab:axah al aa bb間接尋址間接尋址數(shù)據(jù)段數(shù)據(jù)段0001bx操作數(shù)在存儲器中,指令中寄存器內(nèi)容作為操作數(shù)所在操作數(shù)在存儲器中,指令中寄存器內(nèi)容作為
10、操作數(shù)所在單元的有效地址。單元的有效地址。 (bx) (si) (di) (bp)有效地址有效地址 = 段寄存器為段寄存器為ds段寄存器為段寄存器為ss物理地址計算方法:物理地址計算方法:物理地址物理地址 = (ds)* 16 + (bx)或()或(si)或()或(di)物理地址物理地址 = (ss)* 16 + (bp)例:已知:(例:已知:(ds)=2100h,(,(di)=2000h 指令:指令: mov ax,di ;(;(ax) (di) 物理地址物理地址=(ds) * 16 + (di) =2100h * 16 + 2000h =21000h + 2000h =23000h 指令結(jié)
11、果:將指令結(jié)果:將23000h單元內(nèi)容送單元內(nèi)容送al中,中, 將將23001h單元內(nèi)容送單元內(nèi)容送ah中。中。例:例: mov ax,ds:bp mov bx,es:si3、寄存器相對尋址方式、寄存器相對尋址方式操作數(shù)在存儲器內(nèi),指令中寄存器內(nèi)容與指令指定的位操作數(shù)在存儲器內(nèi),指令中寄存器內(nèi)容與指令指定的位移量(移量(disp)之和作為操作數(shù)所在單元的有效地址。)之和作為操作數(shù)所在單元的有效地址。 (bx) disp8 (si) (di) (bp) disp16有效地址有效地址 = 段寄存器為段寄存器為ds段寄存器為段寄存器為ss+物理地址物理地址 = (ds)* 16 +(bx)+disp
12、8(si)、()、(di)、)、disp16類同。類同。物理地址物理地址= (ss) *16 + (bp)+disp16例:例: 如果如果 (ds)=3000h, (si)= 2000h, count=3000h, 則執(zhí)行指令則執(zhí)行指令 mov ax,conutsi,求出此種尋址方,求出此種尋址方式對應(yīng)的有效地址和物理地址。式對應(yīng)的有效地址和物理地址。有效地址有效地址= 2000h + 3000h = 5000h物理地址物理地址=(ds)*16 + 5000h =30000h + 5000h =35000h4、基址變址尋址方式:、基址變址尋址方式:操作數(shù)在存儲器中,指令將基址寄存器(操作數(shù)在存
13、儲器中,指令將基址寄存器(bx或或bp)與變址寄存器(與變址寄存器(si或或di)內(nèi)容之和作為操作數(shù)所在存)內(nèi)容之和作為操作數(shù)所在存儲單元的有效地址。儲單元的有效地址。 (bx) (si) (bp) (di)有效地址有效地址 =+物理地址物理地址 = (ds) * 16 + (bx)+ (si)或()或(di)物理地址物理地址 = (ss) * 16 + (bp) + (si)或()或(di)例:例: mov ax,bx+di 或或 mov ax,bxdi ds:(bx)+(di) 字存儲單元內(nèi)容送字存儲單元內(nèi)容送ax。例:例: mov ax,bp+si 或或 mov ax,bpsi ss:(
14、bp)+(si) 字存儲單元內(nèi)容送字存儲單元內(nèi)容送ax。 例:如果例:如果 (ds)=2100h, (bx)= 0158h, (di)=10a5h, ea=11fdh, 則執(zhí)行指令則執(zhí)行指令 mov al,bxdi有效地址:有效地址:ea=(bx)+(di)=0158h+10a5h=11fdh 物理地址:(物理地址:(ds) * 16 + 有效地址有效地址=21000h+11fdh=221fdh執(zhí)行結(jié)果:將執(zhí)行結(jié)果:將221fdh單元內(nèi)容送入寄存器單元內(nèi)容送入寄存器al中。中。5、基址變址相對尋址方式、基址變址相對尋址方式操作數(shù)在存儲器內(nèi),指令將基址寄存器(操作數(shù)在存儲器內(nèi),指令將基址寄存器(
15、bx或或bp)與)與變址寄存器(變址寄存器(si或或di)的內(nèi)容之和再加上位移量()的內(nèi)容之和再加上位移量(8位位或或16位),得到操作數(shù)所在單元的有效地址。位),得到操作數(shù)所在單元的有效地址。 (bx) (si) disp8 (bp) (di) disp16有效地址有效地址=+物理地址物理地址 = (ds)* 16 +(bx)產(chǎn)生的有效地址)產(chǎn)生的有效地址物理地址物理地址 = (ss)* 16 +(bp)產(chǎn)生的有效地址)產(chǎn)生的有效地址例:已知:(例:已知:(ds)=3000h,(,(bx)=2000h,(,(si)=1000h,mk=0250h 指令:指令: mov ax,mkbxsi 或或
16、 mov ax,mkbx+si 或或 mov ax,mk+bx+si 有效地址:有效地址:mk+(bx)+(si)=0250h+2000h+0100h =3250h 物理地址:(物理地址:(ds)*16 +有效地址有效地址=30000h+3250h=33250h 執(zhí)行結(jié)果:將執(zhí)行結(jié)果:將33250h單元內(nèi)容送單元內(nèi)容送al,33251h內(nèi)容送內(nèi)容送ah。 6、 段超越段超越當(dāng)操作數(shù)在內(nèi)存單元時,系統(tǒng)根據(jù)隱含約定,自動將當(dāng)操作數(shù)在內(nèi)存單元時,系統(tǒng)根據(jù)隱含約定,自動將寄存器寄存器ds或或ss的值作為段地址。然而,當(dāng)操作數(shù)段的值作為段地址。然而,當(dāng)操作數(shù)段地址不在隱含的段寄存器時,可以使用段超越前綴
17、取地址不在隱含的段寄存器時,可以使用段超越前綴取代其隱含約定。代其隱含約定。 段超越前綴形式為:段超越前綴形式為: 段寄存器名:段寄存器名:mem例如:例如:mov ax,es:bp ;段地址在;段地址在esmov ax,cs:bx si ;段地址在;段地址在cs段地址的基本約定和允許超越的情況如表所示:段地址的基本約定和允許超越的情況如表所示:存儲器存取方式 約定段 允許超越段偏移地址取指令堆棧操作源串目的串bp作基址通用數(shù)據(jù)讀寫csssdsesssds無無cs,es,ss無cs,ds,escs,es,ssipspsidi有效地址ea有效地址ea7、 對內(nèi)存尋址方式的注解對內(nèi)存尋址方式的注解
18、(1)在匯編后,指令中的變量名有具體的偏移地址)在匯編后,指令中的變量名有具體的偏移地址所取代。所取代。 (2)在寄存器相對尋址與相對基址變址方式中,位)在寄存器相對尋址與相對基址變址方式中,位移量移量disp可以是符號常量或變量,匯編后為一個常數(shù),可以是符號常量或變量,匯編后為一個常數(shù),若是變量,則取其偏移地址。若是變量,則取其偏移地址。(3)在)在microsoft宏匯編宏匯編masm(microsoft macro assembler)中,內(nèi)存操作數(shù)可以采用多種書寫形式:)中,內(nèi)存操作數(shù)可以采用多種書寫形式:6bxsi、bx+6si、bx+si+6 (4)在)在 中只能出現(xiàn)立即數(shù)和中只能
19、出現(xiàn)立即數(shù)和bx、bp、si、di,且,且bx和和bp、si和和di不能成對出現(xiàn)在不能成對出現(xiàn)在 中。中。 如:如:bx+bp、si+di是非法的指令形式是非法的指令形式(5)計算出的有效地址以)計算出的有效地址以16位表示,若超過位表示,若超過0ffffh,cpu將忽略所有溢出。將忽略所有溢出。 (6)記憶)記憶8086內(nèi)存操作數(shù)形式的簡易方法如下:內(nèi)存操作數(shù)形式的簡易方法如下: bx si disp bp di每列選擇一項、二項或三項,即可得到有效的內(nèi)存操作每列選擇一項、二項或三項,即可得到有效的內(nèi)存操作數(shù)形式。數(shù)形式。 四、端口尋址方式四、端口尋址方式 操作數(shù)在端口寄存器中,指令中給出了
20、端口的操作數(shù)在端口寄存器中,指令中給出了端口的地址。根據(jù)端口地址的不同,有兩種尋址方式:地址。根據(jù)端口地址的不同,有兩種尋址方式:1、端口直接尋址、端口直接尋址 端口為端口為8位地址位地址00hffh 如:如:in al,80h;8位數(shù)據(jù)位數(shù)據(jù) in ax,80h;16位數(shù)據(jù)位數(shù)據(jù) out 81h,al2、端口間接尋址、端口間接尋址 端口為端口為16位地址位地址0000hffffh 如:如:mov dx,218h in al,dx 源操作數(shù)的尋址方式例源操作數(shù)的允許形式 直接操作數(shù)(立即數(shù))mov ax, 20h指令中的直接常數(shù)間接操作數(shù) 寄存器操作數(shù)mov ax, bx通用寄存器或段寄存器存
21、儲器操作數(shù)直接尋址mov ax, ds:20mov ax, b(字)“段:常數(shù)”或“段:常數(shù)”“變量”或“變量”間接尋址寄存器間接尋址mov ax, bxbx, bp, si, di 之一寄存器相對尋址mov ax, bx+20 mov ax, bx+b(字)bx, bp, si, di 之一位移量基址變址尋址mov ax, bx+sibx, bp之一si, di 之一基址變址相對尋址mov ax, bx+si+20 mov ax, bx+si+b(字)bx, bp之一si, di 之一位移量端口操作數(shù) 直接尋址in al, 20h指令中有端口號(0 0ffh) 間接尋址in al, dxdx
22、 中有端口號(0 0ffffh)操作數(shù)的尋址方式操作數(shù)的尋址方式3.2 指令的機器碼表示方法(略)指令的機器碼表示方法(略) 3.3 8080指令系統(tǒng)指令系統(tǒng)8086/8088的指令系統(tǒng)可以分為的指令系統(tǒng)可以分為6組:組:(1)數(shù)據(jù)傳送指令)數(shù)據(jù)傳送指令(2)算術(shù)運算指令)算術(shù)運算指令(3)邏輯指令與移位指令)邏輯指令與移位指令(4)串操作指令)串操作指令(5)控制轉(zhuǎn)移指令)控制轉(zhuǎn)移指令(6)處理機控制指令)處理機控制指令 一、一、 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 數(shù)據(jù)傳送指令是最簡單、最常用的一類指令,它數(shù)據(jù)傳送指令是最簡單、最常用的一類指令,它是負(fù)責(zé)把數(shù)據(jù)、地址、或立即數(shù)傳送到寄存器或存儲是負(fù)責(zé)
23、把數(shù)據(jù)、地址、或立即數(shù)傳送到寄存器或存儲單元中單元中 。這類指令又可分為以下幾種情況。這類指令又可分為以下幾種情況:通用傳送指令:通用傳送指令:mov、push/pop、xchg、xlat輸入輸出指令:輸入輸出指令:in、out地址目標(biāo)傳送指令:地址目標(biāo)傳送指令:lea、lds、les標(biāo)志傳送指令:標(biāo)志傳送指令:lahf、sahf、pushf、popf1、通用傳送指令、通用傳送指令(1)mov(move):傳送指令):傳送指令mov指令的格式為:指令的格式為:mov dest,src ;destsrc功能:將源操作數(shù)功能:將源操作數(shù)src復(fù)制到目的操作數(shù)復(fù)制到目的操作數(shù)dest中,源操中,源操
24、作數(shù)作數(shù)src的內(nèi)容不變。的內(nèi)容不變。對標(biāo)志位的影響:無對標(biāo)志位的影響:無語法格式:語法格式:mov reg/mem/seg ,reg/mem/seg/immmov指令的操作數(shù)及傳送方向見下頁指令的操作數(shù)及傳送方向見下頁立即數(shù)立即數(shù)imm存儲器存儲器mem通用寄存器通用寄存器regds、es、sscs(seg)說明:說明:雙操作數(shù)指令不允許兩個操作數(shù)同時為段寄存器或雙操作數(shù)指令不允許兩個操作數(shù)同時為段寄存器或存儲器操作數(shù)存儲器操作數(shù) mov seg , seg ;錯誤;錯誤 mov mem ,mem ;錯誤;錯誤 立即數(shù)不能傳送到段寄存器中立即數(shù)不能傳送到段寄存器中 mov seg ,imm
25、; 錯誤錯誤 立即數(shù)不能作為目的操作數(shù)立即數(shù)不能作為目的操作數(shù) mov imm , reg ; 錯誤錯誤目的操作數(shù)不允許使用目的操作數(shù)不允許使用cs、ip寄存器寄存器 mov cs,ax ; 錯誤錯誤dest與與src必須類型匹配,即同時是字節(jié)或字類型。必須類型匹配,即同時是字節(jié)或字類型。 mov ax,bx注意:注意:寄存器具有明確的類型,例如,寄存器具有明確的類型,例如,al、ax分別為字節(jié)、分別為字節(jié)、字類型。字類型。立即數(shù)沒有明確的類型,立即數(shù)沒有明確的類型,masm負(fù)責(zé)將立即數(shù)擴展為負(fù)責(zé)將立即數(shù)擴展為與目的操作數(shù)位數(shù)相同。與目的操作數(shù)位數(shù)相同。 mov al,34h mov bx,5
26、6h有時有時masm不能確定內(nèi)存操作數(shù)的類型,需要用不能確定內(nèi)存操作數(shù)的類型,需要用byte ptr和和word ptr明確指出是字節(jié)或字類型。只要其中一明確指出是字節(jié)或字類型。只要其中一個操作數(shù)的類型確定即可。個操作數(shù)的類型確定即可。 mov 2000h,al mov 2000h,byte ptr 34h例:錯誤的例:錯誤的mov 指令如下所示:指令如下所示:mov ax,bl ;類型不匹配;類型不匹配mov ds,1000h ;不允許立即數(shù)送段寄存器;不允許立即數(shù)送段寄存器mov bx ,si ;不允許內(nèi)存操作數(shù)之間傳送;不允許內(nèi)存操作數(shù)之間傳送mov es,cs ;不允許段寄存器之間傳送
27、;不允許段寄存器之間傳送mov cs,ax ;cs不能作為目的操作數(shù)不能作為目的操作數(shù)例:設(shè)例:設(shè)b是已定義的字節(jié)變量,以下是一些錯誤和正確是已定義的字節(jié)變量,以下是一些錯誤和正確的指令。的指令。mov ax,b ;錯誤,類型不匹配;錯誤,類型不匹配mov b,0 ;正確,;正確,masm可以判斷出要可以判斷出要 送字節(jié)送字節(jié)0到單元到單元b中中mov bx,1 :錯誤,不能確定數(shù)據(jù)類型:錯誤,不能確定數(shù)據(jù)類型mov byte ptr bx,1;正確;正確(2)xchg(exchange):交換指令):交換指令xchg指令的格式為:指令的格式為:xchg oprd1 , oprd2 ;交換;交
28、換oprd1與與oprd2的內(nèi)容的內(nèi)容語法格式為:語法格式為:xchg reg/mem,reg/mem例:設(shè)數(shù)據(jù)段中有兩個字變量例:設(shè)數(shù)據(jù)段中有兩個字變量w1和和w2,將這兩個數(shù)據(jù),將這兩個數(shù)據(jù)互換的程序段如下:互換的程序段如下:mov ax,w1xchg ax,w2mov w1,ax不用數(shù)據(jù)交換指令,僅用不用數(shù)據(jù)交換指令,僅用mov 指令的程序段如下:指令的程序段如下:mov ax,w1mov bx,w2mov w1,bxmov w2,ax還可以用堆棧操作指令來實現(xiàn),程序段如下:還可以用堆棧操作指令來實現(xiàn),程序段如下:push w1push w2pop w1pop w2若若w1、w2為字節(jié)操
29、作數(shù),則前兩種方式均可行(用為字節(jié)操作數(shù),則前兩種方式均可行(用8位寄存器),但不能用堆棧操作指令實現(xiàn),因為堆棧操位寄存器),但不能用堆棧操作指令實現(xiàn),因為堆棧操作只能是字操作。作只能是字操作。(3)push:入堆操作:入堆操作 push reg/mem/seg操作:(操作:(sp) (sp)-2, (sp)+1,(,(sp) (src)即先移后入。即先移后入。(4)pop:出棧:出棧 操作操作 pop reg/mem/seg操作:(操作:(dst) (sp)+1,(,(sp) (sp) (sp)+2先出后移。但先出后移。但cs不能作為目的操作數(shù)。不能作為目的操作數(shù)。堆棧堆棧ss:01f8ss
30、:01fass:01fcss:01fespaa bb(執(zhí)行(執(zhí)行push ax之前)之前)堆棧堆棧ss:01f8ss:01fass:01fcss:01fespaa bb(執(zhí)行(執(zhí)行push ax之后)之后)1101h1101h ax堆棧堆棧ss:01f8ss:01fass:01fcss:01fespaa bb(執(zhí)行(執(zhí)行pop ax之后)之后)1101h ax123(5)xlat 查表指令查表指令 格式:格式:xlat ; bx+al al功能:將表首地址為功能:將表首地址為bx,偏移地址為,偏移地址為al的單元的內(nèi)容送到的單元的內(nèi)容送到al中。該指令通常用來實現(xiàn)一種代碼向另一種代碼的轉(zhuǎn)換。中
31、。該指令通常用來實現(xiàn)一種代碼向另一種代碼的轉(zhuǎn)換。十進制數(shù)七段代碼十進制數(shù)七段代碼040h512h179h602h224h778h330h800h419h918h例:若十進制數(shù)字例:若十進制數(shù)字0-9的的led七段代碼對照表如前所示,七段代碼對照表如前所示,試用求數(shù)字試用求數(shù)字5的七段代碼。的七段代碼。table db 40h,79h,24h,30h,19h db 12h,02h,78h,00h,18h方法方法1: mov al,5 mov bx,offset table xlat方法方法2: mov si,5 mov bx,offset table mov al,bx+si2、輸入輸出指令、輸
32、入輸出指令 輸入輸出指令是用來實現(xiàn)輸入輸出指令是用來實現(xiàn)i/o端口與端口與ax之間的數(shù)據(jù)之間的數(shù)據(jù)傳送。根據(jù)端口地址的不同,又分為端口直接尋址和端傳送。根據(jù)端口地址的不同,又分為端口直接尋址和端口間接尋址兩種??陂g接尋址兩種。(1)in(input)格式:格式:in al,(,(port););8位地址、位地址、8位數(shù)據(jù)位數(shù)據(jù) in ax,(,(port););8位地址、位地址、16位數(shù)據(jù)位數(shù)據(jù) 或:或:in al,dx ;16位地址、位地址、8位數(shù)據(jù)位數(shù)據(jù) in ax,dx ;16位地址、位地址、16位數(shù)據(jù)位數(shù)據(jù)(2)out(output)格式:格式:out dx,al ;其余類同。;其余類
33、同。3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令(1 1)lealea:取有效地址:取有效地址格式:lea reg,mem 功能:取源操作數(shù)地址的偏移量,并把它傳送到止的操作數(shù)所在的單元。要求:源操作數(shù)必須是一個存儲器操作數(shù),目標(biāo)操作數(shù)必須是一個除段寄存器以外的16位寄存器,通常是間址寄存器si等。lea 指令與指令與mov 指令的區(qū)別:指令的區(qū)別:lea si,buff指令是將標(biāo)號指令是將標(biāo)號buff的偏移地址送入寄存器中;的偏移地址送入寄存器中;mov si,buff指令是將標(biāo)號指令是將標(biāo)號buff所指存儲單元的內(nèi)容送所指存儲單元的內(nèi)容送入入si。buff =0123454800fefflea
34、si,buff;執(zhí)行后:(執(zhí)行后:(si)=0002hmov si,buff;執(zhí)行后:(執(zhí)行后:(si)=0048h段起始地址段起始地址(2) lds:傳送有效地址及數(shù)據(jù)段首址指令:傳送有效地址及數(shù)據(jù)段首址指令格式:格式:lds reg16 ,mem32 ;功能:將源操作數(shù)指定的存儲單元中取功能:將源操作數(shù)指定的存儲單元中取4個字節(jié),前兩個字節(jié),前兩個字節(jié)送入指定寄存器,后兩個字節(jié)送個字節(jié)送入指定寄存器,后兩個字節(jié)送ds寄存器。寄存器。(3)les:傳送有效地址及附加數(shù)據(jù)段指令:傳送有效地址及附加數(shù)據(jù)段指令格式:格式:les reg16 ,mem32 ;功能:將源操作數(shù)指定的存儲單元中取功能:
35、將源操作數(shù)指定的存儲單元中取4個字節(jié),前兩個字節(jié),前兩個字節(jié)送入指定寄存器,后兩個字節(jié)送個字節(jié)送入指定寄存器,后兩個字節(jié)送es寄存器。寄存器。說明:指令中源操作數(shù)必須是存儲單元,從該單元開說明:指令中源操作數(shù)必須是存儲單元,從該單元開始的連續(xù)始的連續(xù)4個字節(jié)單元中,存放著一個變量的地址指針。個字節(jié)單元中,存放著一個變量的地址指針。57h13h68h24h例:(例:(ds)=c000h,(,(c2480h)=1357h,(,(c2482h)=2468hds:2480hds:2481hds:2482hds:2483h 13 57 24 68 sidslds si,2480lds指令例指令例 ds
36、= 6000h di = 1234h ax = 2233h 12h34h00h60h1200h數(shù)數(shù)據(jù)據(jù)段段 1 ds60 0012 34di數(shù)數(shù)據(jù)據(jù)段段233h22h61234h4. 標(biāo)志傳送(位操作)指令標(biāo)志傳送(位操作)指令 lahfsahfpushfpopf隱含操作數(shù)隱含操作數(shù)ah隱含操作數(shù)隱含操作數(shù)flagslahf,sahf(1)lahf ;將flags的低8位裝入ah(2)sahf ;執(zhí)行與lahf相反的操作sfpfafzfcf.ahflagsd15d0d7d0例:標(biāo)志寄存器傳送。例:標(biāo)志寄存器傳送。執(zhí)行前:(執(zhí)行前:(flags)=0485h,(,(ax)=0ffffh執(zhí)行指令執(zhí)
37、行指令lahf后,后, (flags)=?(3)pushf功能:功能:將標(biāo)志寄存器的內(nèi)容進棧,同時修改sp。(4)popf功能:功能:把當(dāng)前sp所指的字送到標(biāo)志寄存器psw,并修改sp的值。標(biāo)志傳送指令說明:標(biāo)志傳送指令說明:lahf/sahf指令是寄存器指令是寄存器ah與標(biāo)志寄存器與標(biāo)志寄存器psw的低的低字節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。字節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。 pushf/popf指令是標(biāo)志寄存器指令是標(biāo)志寄存器psw與堆棧間進行的與堆棧間進行的字型數(shù)據(jù)傳送。字型數(shù)據(jù)傳送。指令指令sahf/popf將影響標(biāo)志位。將影響標(biāo)志位。所有的數(shù)據(jù)傳送類指所有的數(shù)據(jù)傳送類指令僅此兩條指令影響標(biāo)志位
38、。令僅此兩條指令影響標(biāo)志位。二、二、 算術(shù)運算指令算術(shù)運算指令運算的數(shù)據(jù)類型:有符號二進制數(shù)、無符號二進制數(shù)、運算的數(shù)據(jù)類型:有符號二進制數(shù)、無符號二進制數(shù)、無符號壓縮無符號壓縮bcd碼、無符號非壓縮碼、無符號非壓縮bcd碼。碼。除除cbw、cwd外,所有指令均影響標(biāo)志位。外,所有指令均影響標(biāo)志位。指令類型:指令類型: 加法:加法:add、adc、inc 減法:減法:sub、sbb、dec、neg、cmp 乘法:乘法:mul、imul 除法:除法:div、idiv 符號擴展:符號擴展:cbw、cwd十進制調(diào)整:十進制調(diào)整:daa、das、aaa、aas、aam、aad1、加法指令、加法指令指令
39、格式:指令格式:加法加法 add dst,src;(;(dst) (src)+(dst)帶進位加法帶進位加法 adc dst,src; (dst) (src)+(dst)+cf加加 1 inc dst ;(;(dst) (dst)+1說明:說明:這在三條指令運算結(jié)果將影響狀態(tài)標(biāo)志位,但是這在三條指令運算結(jié)果將影響狀態(tài)標(biāo)志位,但是inc指令不影響標(biāo)志指令不影響標(biāo)志cf。src可為可為imm、mem、reg,而,而dst只能為只能為reg、mem類型。類型。加法指令也有數(shù)據(jù)傳送的功能,所以前面數(shù)據(jù)傳送加法指令也有數(shù)據(jù)傳送的功能,所以前面數(shù)據(jù)傳送指令的限制同樣有效。指令的限制同樣有效。如不能同時為存
40、儲器操作數(shù)如不能同時為存儲器操作數(shù)例:將例:將3個個32位無符號數(shù)位無符號數(shù)12345678h,8765abcdh和和2468fedch相加,其和(仍為相加,其和(仍為32無符號位數(shù))送無符號位數(shù))送dx和和ax的程序段如下:的程序段如下: mov dx,1234h mov ax,5678h add ax,0abcdh adc dx,8765h add ax,0fedch adc dx,2468h注意:字母開頭的十六進制數(shù),要在其前面加一數(shù)字注意:字母開頭的十六進制數(shù),要在其前面加一數(shù)字0對對inc 指令,指令,dst既是源操作數(shù),又是目的操作數(shù),既是源操作數(shù),又是目的操作數(shù),因此因此dst只
41、能是只能是reg或或mem,為,為mem操作數(shù)時,必操作數(shù)時,必須指明數(shù)據(jù)類型,否則出錯。須指明數(shù)據(jù)類型,否則出錯。 如:如:inc si ;錯誤;錯誤 應(yīng)為:應(yīng)為:inc word ptr si ;字內(nèi)容加;字內(nèi)容加1 inc byte ptr si ;字節(jié)內(nèi)容加;字節(jié)內(nèi)容加1 2、減法指令、減法指令指令格式:指令格式:減法減法 sub dst,src ;(;(dst) (dst)- (src)帶進位減法帶進位減法 sbb dst,src;(;(dst)()(dst)-(src)-cf減減 1 dec opr ;(;(opr) (opr)-1求補求補 neg opr ;(;(opr) 0ff
42、ffh-(opr)+1比較比較 cmp opr1,opr2;(;(opr1)-(opr2) 以上五條指令均可作字或字節(jié)運算,而且除以上五條指令均可作字或字節(jié)運算,而且除dec不不影響影響cf外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位 。說明:說明: 減法指令的語法規(guī)范同加法指令一致減法指令的語法規(guī)范同加法指令一致 求補指令不是求補碼指令,它對任何形式的數(shù)均求補指令不是求補碼指令,它對任何形式的數(shù)均求補。求補。如如al=0ah,neg al 后,后,al=f6h。所以所以neg指令常用來求負(fù)數(shù)(補碼形式)的絕對值指令常用來求負(fù)數(shù)(補碼形式)的絕對值 比較指令除了不回送結(jié)
43、果外,其他一切均同比較指令除了不回送結(jié)果外,其他一切均同sub指令,該指令主要用來判斷兩數(shù)的大小與是否相等。指令,該指令主要用來判斷兩數(shù)的大小與是否相等。比較指令后面常常是條件轉(zhuǎn)移指令,根據(jù)比較的結(jié)果比較指令后面常常是條件轉(zhuǎn)移指令,根據(jù)比較的結(jié)果實現(xiàn)程序的轉(zhuǎn)移。實現(xiàn)程序的轉(zhuǎn)移。 sbb指令常用在多精度數(shù)的減法運算。指令常用在多精度數(shù)的減法運算。 例:例:34124275h-2f65e2a5h=? 34 124 275 -2f65e2a5 04ac4fd0程序段:程序段:x dw 4275h,3412h y dw 0e2a5h,2f65h z dw 0,0 mov ax,x sub ax,y m
44、ov z,ax mov ax,x+2 sbb ax,y+2 mov z+2,ax 3、乘法指令、乘法指令指令格式:指令格式:無符號數(shù)乘法無符號數(shù)乘法 mul src ;(;(ax)()(al)*(src)字節(jié)乘法)字節(jié)乘法 ;(;(dx,ax)()(ax)*(src)字乘法)字乘法帶符號數(shù)乘法帶符號數(shù)乘法 imul src;操作同上;操作同上進行字節(jié)運算時,目的操作數(shù)必須是累加器進行字節(jié)運算時,目的操作數(shù)必須是累加器al,乘積在寄存器,乘積在寄存器ax中;進行字運算時,目的操作數(shù)必須是累加器中;進行字運算時,目的操作數(shù)必須是累加器ax,乘積在寄,乘積在寄存器存器dx,ax中。中。源操作數(shù)不允許
45、使用立即數(shù)。源操作數(shù)不允許使用立即數(shù)。乘法指令運算結(jié)果只影響狀態(tài)標(biāo)志乘法指令運算結(jié)果只影響狀態(tài)標(biāo)志cf、of。例:例:mul bx ;無符號數(shù)乘法,;無符號數(shù)乘法,bx乘上乘上ax 例例:編程求編程求y=5x,假定,假定x為字節(jié)數(shù)。為字節(jié)數(shù)。 mov al,x mov bl,5 mul bl mov al,5 mul x 4、除法指令、除法指令指令格式:指令格式:無符號數(shù)除法無符號數(shù)除法 div src ;(;(al) (ax)/(src)除法的商)除法的商 (ah) (ax)/(src)除法余數(shù))除法余數(shù) 或者或者 (ax)()(dx,ax)/(src)除法的商)除法的商 (dx)()(dx
46、,ax)/(src)除法余數(shù))除法余數(shù)帶符號數(shù)除法帶符號數(shù)除法 idiv src ;操作同上。;操作同上。當(dāng)除數(shù)是字節(jié)數(shù)據(jù)時,被除數(shù)必須放在當(dāng)除數(shù)是字節(jié)數(shù)據(jù)時,被除數(shù)必須放在ax中;當(dāng)除數(shù)是字?jǐn)?shù)據(jù)中;當(dāng)除數(shù)是字?jǐn)?shù)據(jù)時,被除數(shù)必須放在時,被除數(shù)必須放在dx,ax中。中。除法指令運算結(jié)果對狀態(tài)標(biāo)志無定義。除法指令運算結(jié)果對狀態(tài)標(biāo)志無定義。8086/8088規(guī)定規(guī)定idiv指令運算結(jié)果余數(shù)的符號與被除數(shù)相同。指令運算結(jié)果余數(shù)的符號與被除數(shù)相同。帶符號數(shù)除法運算中,當(dāng)被除數(shù)位數(shù)不夠時,可進行擴展。帶符號數(shù)除法運算中,當(dāng)被除數(shù)位數(shù)不夠時,可進行擴展。符號擴展指令:符號擴展指令:字節(jié)擴展到字字節(jié)擴展到字
47、cbw;將寄存器;將寄存器al中的符號位擴展到寄存器中的符號位擴展到寄存器ah字?jǐn)U展到雙字字?jǐn)U展到雙字 cwd;將寄存器;將寄存器ax中的符號位擴展到寄存器中的符號位擴展到寄存器dx指令功能:指令功能: 如果(如果(al)80h,則(,則(ah)=00h(正數(shù))(正數(shù)) 否否則(則(ah)=0ffh(負(fù)數(shù))(負(fù)數(shù)) 如果(如果(ax)8000h,則,則dx=0000h(正數(shù))(正數(shù)) 否則(否則(dx)=0ffffh(負(fù)數(shù))(負(fù)數(shù)) 70al70ah015axdx150cbwcwd例:求例:求-4001h4=?mov ax,-4001hcwdmov cx,4idiv cx說明:此題不能用說明:
48、此題不能用16位除位除8位的方式,因為其商超過了位的方式,因為其商超過了256。 5、壓縮、壓縮bcd碼十進制調(diào)整指令碼十進制調(diào)整指令加法十進制調(diào)整加法十進制調(diào)整 daa;執(zhí)行的操作:這條指令執(zhí)行前必須先執(zhí)行執(zhí)行的操作:這條指令執(zhí)行前必須先執(zhí)行add或或adc指令,加法指令必須把兩個壓縮的指令,加法指令必須把兩個壓縮的bcd碼相加,并把結(jié)碼相加,并把結(jié)果存放在果存放在al寄存器中。寄存器中。 減法十進制調(diào)整減法十進制調(diào)整 das;執(zhí)行的操作:這條指令執(zhí)行之前,必須先執(zhí)行執(zhí)行的操作:這條指令執(zhí)行之前,必須先執(zhí)行sub或或sbb指令,減法指令必須把兩個指令,減法指令必須把兩個bcd碼相減,并把結(jié)果
49、碼相減,并把結(jié)果存放在存放在al寄存器中。寄存器中。 調(diào)整的方法:調(diào)整的方法:累加器累加器al低低4位大于位大于9或輔助進位標(biāo)志位或輔助進位標(biāo)志位af=1,則累加器,則累加器al加加06h修正。修正。累加器累加器al高高4位大于位大于9或輔助進位標(biāo)志位或輔助進位標(biāo)志位af=1,則累加器,則累加器al加加60h修正。修正。累加器累加器al高高4位大于等于位大于等于9,低,低4位大于位大于9,則累加器,則累加器al進行加進行加66h修正。修正。例:進行例:進行bcd碼加法運算碼加法運算59+68=127 0101 1001 59 + 0110 1000 68 1100 0001 c1 + 0110
50、 0110 66 10010 0111 127 加法運算結(jié)果為加法運算結(jié)果為c1,af=1,高位大于,高位大于9加加66h進行壓縮進行壓縮bcd調(diào)整調(diào)整說明:說明:壓縮壓縮bcd碼加法或減法十進制調(diào)整指令必須在碼加法或減法十進制調(diào)整指令必須在add(adc)或或sub(sbb)指令之后,調(diào)整結(jié)果對標(biāo)志)指令之后,調(diào)整結(jié)果對標(biāo)志of無影響,對其它無影響,對其它狀態(tài)標(biāo)志位均有影響。狀態(tài)標(biāo)志位均有影響。減法十進制調(diào)整方法與加法十進制調(diào)整方法類同,只是將加減法十進制調(diào)整方法與加法十進制調(diào)整方法類同,只是將加6變?yōu)闇p變?yōu)闇p6操作。操作。上述加法及調(diào)整的指令如下:上述加法及調(diào)整的指令如下: mov al,
51、59h add al,68h daa練習(xí):求練習(xí):求8338=?(用?(用bcd碼實現(xiàn))碼實現(xiàn))6、非壓縮、非壓縮bcd碼十進制調(diào)整指令碼十進制調(diào)整指令指令格式:指令格式:加法十進制調(diào)整加法十進制調(diào)整 aaa ;減法十進制調(diào)整減法十進制調(diào)整 aas ;乘法十進制調(diào)整乘法十進制調(diào)整 aam ;除法十進制調(diào)整除法十進制調(diào)整 aad ;aaa指令將指令將al的內(nèi)容變換成一位非壓縮的十進制數(shù)。的內(nèi)容變換成一位非壓縮的十進制數(shù)。aaa檢檢查查al低四位,如低四位是低四位,如低四位是0-9的數(shù)字,的數(shù)字,aaa就清除就清除al的高四的高四位,以及位,以及af和和cf標(biāo)志;如標(biāo)志;如al低四位表示的數(shù)大于低
52、四位表示的數(shù)大于9或或af=1,aaa執(zhí)行:執(zhí)行:加加6到到al寄存器;寄存器;加加1到到ah寄存器;寄存器;置置af=1,cf=1;清除清除al高四位為高四位為0例:求例:求7+8=?mov ax,0007hmov bl,08hadd al,blaaa ;結(jié)果;結(jié)果al=05h,ah=01h,cf=af=1。aas指令檢查指令檢查al低四位,如低四位表示的數(shù)是低四位,如低四位表示的數(shù)是0-9的的數(shù)字,數(shù)字,ass清除清除al高四位及高四位及cf和和af標(biāo)志;如標(biāo)志;如al低四低四位表示的數(shù)大于位表示的數(shù)大于9或或af=1,aas進行如下調(diào)整:進行如下調(diào)整:al減去減去6;ah減去減去1;置置
53、af=1,cf=1;清除清除al中高四位中高四位。例:求例:求134=?mov ax,0103hmov bl,04hsub al,bl ;al=ffhaas ;al=09h,ah=0aam:指令的作用是用:指令的作用是用10(0ah)來除)來除al寄存器的寄存器的內(nèi)容,并將除得的商和余數(shù)分別送到內(nèi)容,并將除得的商和余數(shù)分別送到ah和和al來實現(xiàn)來實現(xiàn)轉(zhuǎn)換。轉(zhuǎn)換。例:例:79=?mov al,07hmov bl,09hmul bl ;ax=003fhaam ;ah=06h,al=03haad(非壓縮(非壓縮bcd碼除法調(diào)整)碼除法調(diào)整)指令格式:指令格式:aad指令功能:在做除法之前,將指令功能
54、:在做除法之前,將al加加ah*10,ah清清0進進行調(diào)整。然后與非壓縮行調(diào)整。然后與非壓縮bcd碼作除法,碼作除法,al中得到正中得到正確的商,確的商,ah中得到正確的余數(shù)。中得到正確的余數(shù)。例:例:732=? mov ax,0703h mov bl,02h aad div bl ;al=24h,ah=01h aam ;ah=03h,al=06h以上幾條指令的執(zhí)行結(jié)果為:在以上幾條指令的執(zhí)行結(jié)果為:在ax中得到正確的商中得到正確的商(非壓縮(非壓縮bcd碼),但余數(shù)丟失。如果需要保留余數(shù),碼),但余數(shù)丟失。如果需要保留余數(shù),則應(yīng)在則應(yīng)在div指令之后,指令之后,aam之前,將余數(shù)暫存到一個之
55、前,將余數(shù)暫存到一個寄存器。如果有必要,還應(yīng)對余數(shù)進行調(diào)整。寄存器。如果有必要,還應(yīng)對余數(shù)進行調(diào)整。三、三、 邏輯運算與移位指令邏輯運算與移位指令1、邏輯運算指令:對字節(jié)或字?jǐn)?shù)據(jù)進行按位的操作。、邏輯運算指令:對字節(jié)或字?jǐn)?shù)據(jù)進行按位的操作。格式:格式:邏輯與邏輯與 and dst,src; (dst)()(dst)and(src)邏輯或邏輯或 or dst,src; (dst)()(dst)or(src)邏輯非邏輯非 not opr ; (opr)()(opr)異或異或 xor dst,src; (dst)()(dst)xor(src)測試測試 test opr1,opr2;(;(opr1)a
56、nd(opr2)and指令主要用于使操作數(shù)的某些位保留(和指令主要用于使操作數(shù)的某些位保留(和1相與)、相與)、某些位清某些位清0(和(和0相與)。相與)。 例:例:and al,0fh;屏蔽高;屏蔽高4位,保留低位,保留低4位。位。 or用法:用法: a 用于使操作數(shù)的某些位保留(和用于使操作數(shù)的某些位保留(和0相或),某些相或),某些位置位置1(和(和1相或)。相或)。 b 用于分離符號標(biāo)志,進行判斷、轉(zhuǎn)移。影響用于分離符號標(biāo)志,進行判斷、轉(zhuǎn)移。影響zf、sf和和pf,cf=of=0。例:例:or bx,0c000b將將bx的兩位最高的有效位(的兩位最高的有效位(15和和14位)置成位)置
57、成1,而其,而其它位不變。它位不變。xor用法:用于使操作數(shù)的某些位保留(與用法:用于使操作數(shù)的某些位保留(與0異或),異或),某些位取反(和某些位取反(和1異或)。異或)。例:將例:將al的高的高4位保留,低位保留,低4位取反:位取反: xor al,0fh例:將例:將ax中的內(nèi)容清中的內(nèi)容清0: xor ax,axnot指令改變寄存器或存儲單元的每一位狀態(tài),原指令改變寄存器或存儲單元的每一位狀態(tài),原來為來為0變?yōu)樽優(yōu)?,原為,原為1變?yōu)樽優(yōu)?。例:例: not ax ;ax各位取反各位取反test指令是一條測試指令,它執(zhí)行的操作與指令是一條測試指令,它執(zhí)行的操作與and相相同,不過它不送回
58、結(jié)果,只影響標(biāo)志位。同,不過它不送回結(jié)果,只影響標(biāo)志位。例:例:test al,0000 0001b;如;如al最低位為最低位為0,則,則zf=1。例:測試?yán)簻y試al的的0、3、5位,若有一位為位,若有一位為1,則轉(zhuǎn)出錯,則轉(zhuǎn)出錯處理。處理。 test al,00101001b jnz error ;zf=0,轉(zhuǎn)出錯,轉(zhuǎn)出錯error。2、移位指令、移位指令邏輯左移邏輯左移 shl opr,cnl算術(shù)左移算術(shù)左移 sal opr,cnl邏輯右移邏輯右移 shr opr,cnl算術(shù)右移算術(shù)右移 sar opr,cnl其中:其中:opr為操作數(shù),為操作數(shù),cnl為為1或或cl表示移位次數(shù)表示移位
59、次數(shù)0cfopr0cfoprcfopr例:設(shè)例:設(shè)al=1011 0100,cf=1在在shl al,1之后,之后,al= 0110 1000 cf=1在在sal al,1之后,之后,al= 0110 1000 cf=1在在shr al,1之后,之后,al=0101 1010 cf=0在在sar al,1之后,之后,al=1101 1010 cf=0 算術(shù)左移(算術(shù)左移(sal)和算術(shù)右移()和算術(shù)右移(sar)實現(xiàn)帶符號數(shù)移位。)實現(xiàn)帶符號數(shù)移位。sar通過在整個移位過程中復(fù)制符號來保護操作數(shù)的符號。通過在整個移位過程中復(fù)制符號來保護操作數(shù)的符號。sal不保護進位,但如果符號位發(fā)生變化的話,
60、就將不保護進位,但如果符號位發(fā)生變化的話,就將1送送of標(biāo)標(biāo)志。在多次移位的情況下,志。在多次移位的情況下,of的值不確定。的值不確定。邏輯左移(邏輯左移(shl)和邏輯右移()和邏輯右移(shr)對無符號數(shù)的移位。)對無符號數(shù)的移位。shl將操作數(shù)左移,空出來的第將操作數(shù)左移,空出來的第0位置位置0;shr將操作數(shù)右移,空出來的高位(字節(jié)時第將操作數(shù)右移,空出來的高位(字節(jié)時第7位,字時第位,字時第15位)置位)置0。例:將兩個非壓縮例:將兩個非壓縮bcd碼(高位在碼(高位在bl,低位在,低位在al)合并成壓)合并成壓縮縮bcd碼送碼送al。 mov cl,4 ;將計數(shù)值送;將計數(shù)值送cl
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國風(fēng)速記錄儀數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國青梗菜種子數(shù)據(jù)監(jiān)測研究報告
- 裝修人工費節(jié)能標(biāo)準(zhǔn)協(xié)議
- 商業(yè)街鋪面裝修施工方案及管理措施
- 特種設(shè)備事故處理整改報告范文
- 私人導(dǎo)游服務(wù)行程安排協(xié)議
- 工業(yè)自動化系統(tǒng)研發(fā)合作協(xié)議
- 項目風(fēng)險與對策管理制度
- 物聯(lián)網(wǎng)技術(shù)應(yīng)用合作研究協(xié)議
- GB/T 37238-2018篡改(污損)文件鑒定技術(shù)規(guī)范
- 普通高中地理課程標(biāo)準(zhǔn)簡介(湘教版)
- 河道治理工程監(jiān)理通知單、回復(fù)單范本
- 超分子化學(xué)簡介課件
- 高二下學(xué)期英語閱讀提升練習(xí)(一)
- 易制爆化學(xué)品合法用途說明
- 【PPT】壓力性損傷預(yù)防敷料選擇和剪裁技巧
- 大氣喜慶迎新元旦晚會PPT背景
- DB13(J)∕T 242-2019 鋼絲網(wǎng)架復(fù)合保溫板應(yīng)用技術(shù)規(guī)程
- 心電圖中的pan-tompkins算法介紹
- 羊絨性能對織物起球的影響
評論
0/150
提交評論