




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、PAGE 第4章 8086的指令系統(tǒng)一、教學基本要求本章重點講述8086的尋址方式、指令系統(tǒng)、常用的偽指令、常用的系統(tǒng)功能調(diào)用以及匯編語言程序設(shè)計的基本技術(shù)。為學生更好的掌握和使用微機系統(tǒng)以及常用的接口電路的使用打下堅實的軟件基礎(chǔ)。1、8086的尋址方式,要求達到“領(lǐng)會”層次。2、8086的指令系統(tǒng),要求達到“應(yīng)用”層次。3、匯編語言中的標記、表達式和偽指令,要求達到“應(yīng)用”層次。4、常用的系統(tǒng)功能調(diào)用,要求達到“領(lǐng)會”層次。5、匯編語言程序設(shè)計的基本技術(shù),要求達到“應(yīng)用”層次。二、教學重點和難點1. 8086的尋址方式。*立即數(shù)尋址;*寄存器尋址;*直接尋址;*寄存器間接尋址;2、8086的
2、指令系統(tǒng)。 指令格式;指令執(zhí)行時間;*傳送指令、*算術(shù)運算指令、*邏輯運算和移位指令;*串操作指令;*控制轉(zhuǎn)移指令(含中斷指令等)3、匯編語言中的標記、表達式和偽指令。*標識符;*保留字;*界符;*操作數(shù);*運算符;*語句;*符號定義偽指令;*數(shù)據(jù)定義偽指令;段與模塊定義偽指令;過程定義偽指令;4、常用的系統(tǒng)功能調(diào)用 MS-DOS的軟件中斷;系統(tǒng)功能調(diào)用5、匯編語言程序設(shè)計的基本技術(shù) *順序程序設(shè)計;*循環(huán)程序設(shè)計;*分支程序設(shè)計;*子程序設(shè)計三、學習要點及教材分析本章前半部分8086的尋址方式和指令系統(tǒng)以及偽指令部分是該章基礎(chǔ),后半部分是匯編語言編程。與高級語言相比,匯編語言是最接近機器語言
3、的,而高級語言是最接近自然語言的,有人把C語言不偏不倚插在中間,說是高低級語言之間的橋梁,不無道理。8086的尋址方式機動靈活,初學者很難勝任用“手工”把一個數(shù)據(jù)從計算機中的一個地方搬到另一個地方,無論是作為數(shù)據(jù)源還是數(shù)據(jù)目的地,都要人為規(guī)定數(shù)據(jù)存放地點,這就是尋址。4.1 8086的尋址方式4.1.1立即數(shù)尋址8位或16位操作數(shù)(整數(shù))就在指令中立即數(shù)。多用于寄存器賦值,立即數(shù)只能作為源操作數(shù)。MOV AL, 80H ;B080將8位16進制數(shù)80H送入ALMOV AX,1090H ;B89010將16位16進制數(shù)送AX,AL90HMOV AH,2BH; B42BMOV CX,400; B9
4、9001MOV CL,-30; B1E2 立即數(shù)在機器中存放時符號擴展立即數(shù)也可以是定義過的符號常量、表達式。數(shù)值要在一定范圍內(nèi)。4.1.2寄存器尋址操作數(shù)就在CPU的內(nèi)部寄存器中,寄存器名可出現(xiàn)在指令中,快,無需總線周期,寄存器尋址可對源和或目的數(shù)。MOV AX,ES ;ES寄存器中內(nèi)容送入AX中INC CX ;將CX的內(nèi)容加1ROL AL,1 ;將AL中的內(nèi)容循環(huán)左移一位寄存器可以是AX BX CX DX SI DI SP BP或AL AHDL DH下面的6種尋址方式,操作數(shù)均在存儲器中。4.1.3直接尋址單元地址由指令直接給出,數(shù)據(jù)總在存儲單元中,指令前無指令前綴則默認DS段,否則,本條
5、指令前必須用前綴指出段寄存器名段超越MOV AX, 1070H ;將DS段的1070H和1071H單元內(nèi)容送AXMOV BX, CS : 3000H ; 將CS段的3000H和3001H內(nèi)容送BX若CS5100H,則將54000H和54001H內(nèi)容送BX編程時常用定義過的符號地址代替數(shù)值地址MOV AX,VALUE; 相當于 MOV AX,VALUE;數(shù)據(jù)段VALUE單元4.1.4寄存器間接尋址Register Indirect Addressing寄存器間接尋址方式,操作數(shù)一定在存儲單元中,存儲單元的有效地址在寄存器中。SI DI BX間接尋址指令前綴未指明段地址,則默認DS,如寄存器為BP
6、,則默認SS段,采用寄存器間接尋址時,指令中可指定一個位移量(8位或16位)。寄存器間接尋址可細分以下4種:1.以BX寄存器進行間接尋址數(shù)據(jù)段基址尋址MOV AX, BX;若DS5000H,BX=3000H,則53000H、53001H內(nèi)容送AX如要對其它段尋址,用段前綴指明MOV CX, ES: BX;若ES3000H,BX=4000H,則34000H、34001H 送CX2.以BP寄存器進行間接尋址堆棧段基址尋址MOV BX, BP ;若SS=4000H,BP2000H,則42000H、42001H內(nèi)容送BX3.以SI、DI寄存器進行變址尋址SI、DI源和目的變址寄存器,常用于對數(shù)組的操作
7、和串操作MOV CX, SI ;若DS7000H,SI8000H,則78000H、78001H內(nèi)容送CX4.將BX、BP和SI、DI寄存器組合起來進行間接尋址基址變址MOV AX, BX +SI ; 一個基址(BX、BP)一個變址(SI、DI)若DS=1000H, BX=2000H,SI=3000H,則15000H、15001H內(nèi)容送AX基址變址 如果用了BP,默認段寄存器為SS,否則默認DS,SI和DI不能同時出現(xiàn)在一句指令中。5.相對的基址變址 可以帶一個8位或16位位移量 MOV AX, BX+SI+0050 ; 將BX和SI的內(nèi)容與0050相加作有效地址也有如果用了BP,默認段寄存器為
8、SS,否則默認DS的約定。相對的基址變址 3數(shù)相加再加段代碼多種寫法:MOV AX,MASKBXDIMOV AX,MASK+BX+DIMOV AX,BXDI+MASKMOV AX,BX+DI +MASK4.2 8086指令系統(tǒng)的概況數(shù)據(jù)傳送類(Data transfer)14條算術(shù)運算類(Arithmetic)20條邏輯運算類(Logic)12條串操作類(String manipulateion)8條控制轉(zhuǎn)移類(Control transferr)26條處理器控制類(Processor control)12條4.2.1指令格式指令格式中包含了指令系統(tǒng)的設(shè)計思想,有必要了解。8086的指令為16
9、字節(jié)。第1或2個字節(jié)為操作碼和尋址方式操作碼域8086大多數(shù)指令的操作碼中含有3個特征位,W、D、S位。W是字操作位, W1 對字操作,W0 字節(jié)操作D位是對目的操作數(shù)進行寄存器尋址的標志,D0寄存器尋址源操作數(shù)S位是符號擴展位,擴展方法使所有高位低位字節(jié)的最高有效位S0,W=0時,為8位操作數(shù)S0,W=1時,為16位操作數(shù)S1,W=1時,為由8位操作數(shù)作符號擴展得到的16位操作數(shù)。操作碼后為操作數(shù)域,可為有效地址、位移量、立即數(shù),這要由操作碼和尋址方式?jīng)Q定,8086規(guī)定一條指令只能包含12個操作數(shù)。涉及2個操作數(shù)的指令中,至少一個操作數(shù)必須用寄存器給出。16位立即數(shù)或位移量,指令代碼中低位字
10、節(jié)在前,高位字節(jié)在后(匯編后)。有些單字節(jié)指令中,隱含指出了寄存器。MOD操作碼R/M或MOD REG R/MMOD叫方式字段,指出操作數(shù)放在存儲器還是寄存器中。 表3.1 MOD字段的編碼MOD數(shù)據(jù)00存儲器尋址,不帶位移量01存儲器尋址,帶8位位移量10存儲器尋址,帶16位位移量11寄存器尋址,沒有位移量當MOD=11時,操作數(shù)就在寄存器中,由R/M指出寄存器編號R/M字段受MOD控制,MOD11時,R/M還表明如何計算存儲單元有效地址 REG叫寄存器字段,指定一個寄存器,操作碼域的D位則指出源還是目的操作數(shù) 4.2.2 指令執(zhí)行時間(指令周期)。取決于時鐘周期和時鐘周期數(shù),涉及內(nèi)存時,加
11、上計算有效地址所需時間.指令周期=基本執(zhí)行時間+計算有效地址時間+訪問內(nèi)存時間。字操作數(shù)在內(nèi)存的存放格式,影響指令執(zhí)行時間。一個字若放在奇地址開始的存儲單元,需要兩個總線周期(8*T)。一個從偶地址開始的字,與一個字節(jié)相同,只要一個總線周期(4*T)4.3 8086指令8086指令系統(tǒng)中包含133條基本指令,特有難點:一是新手未掌握指令規(guī)定的細節(jié),編出的程序?qū)嶋H不能運行二是老手習慣于一些簡單指令,功能強的不會用4.3.1傳送指令4類傳送指令,實現(xiàn)CPU內(nèi)部寄存器之間、CPU和存儲器、I/O端口間。通用傳送指令。累加器專用傳送指令。地址傳送指令。標志傳送指令通用傳送指令 通用傳送指令中包括最基本
12、的MOV、堆棧指令PUSH和POP,數(shù)據(jù)交換指令XCHG最基本的傳送指令最簡單、用得最多的指令,CPU內(nèi)部寄存器之間、寄存器與內(nèi)存、立即數(shù)到寄存器。格式:MOV DST,SRCMOV m/r,r/m如:MOV AX,DX ;AX DXMOV AL,SI+DISPMOV BXSI,DXMOV m/r,IMOV BX,2000HMOV TABLE,3AF0H ;(TABLE) 3AF0HMOV DI,2345HMOV CL,4MOV m/a,a/mMOV AX,VALUE ;AL(VALUE),AH (VALUE+1)MOV SI+2,ALMOV rs,m16/r16MOV ES,AXMOV DS
13、,BX+SIMOV m16/r16,rsMOV AX,DSMOV BP+5,ES幾點注意:可傳送8位或16位數(shù)據(jù),取決所用寄存器或立即數(shù)位數(shù)指令中既有源操作數(shù)又有目的操作數(shù),至少一個用寄存器指出。立即數(shù)不能直接送段寄存器。不能在兩個內(nèi)存單元之間、兩個段寄存器間直接傳送數(shù)據(jù)CS和IP寄存器不能作為目的操作數(shù)(不能隨意修改)用BX、SI、DI間接尋址時,默認DS段,BP間址默認SS段8086規(guī)定,給SS賦值時,系統(tǒng)自動禁止外部中斷所有通用傳送指令都不影響標志位堆棧操作指令子程序調(diào)用和中斷處理,分別要保存返回地址和斷點地址,進入處理程序后,還要保護現(xiàn)場,均須堆棧操作。PUSH AX ;將AX的內(nèi)容推
14、入堆棧(棧頂上移2格)PUSH BX+DI;將BX+DI和BX+DI+1內(nèi)容入棧(頂上移2格)POP ES ;將棧頂兩單元彈出送ESPOP BX+DI ;將棧頂兩單元彈出送BX+DI和BX+DI+1堆棧幾點注意:8086的堆棧操作總是按字進行的,不存在PUSH AL 之類每次PUSH 指針SP2,低位字節(jié)入低地址,彈出反之CS可移入棧,但不能 POP 到CS堆棧中的數(shù)據(jù)先進后出,POP順序應(yīng)與PUSH相反交換指令交換指令XCHG可實現(xiàn)字節(jié)、字交換XCHG AL,BL ;AL和BL之間進行字節(jié)交換XCHG BX,CX ;BX和CX之間進行字交換XCHG 2530H,CX;CX中的內(nèi)容和2530、
15、2531兩單元的內(nèi)容交換交換指令注意兩點:目的操作數(shù)和原操作數(shù)不能都是內(nèi)存單元CS、IP寄存器不能作為交換指令的源操作數(shù)、目的操作數(shù)累加器專用傳送指令(兩類)輸入輸出指令執(zhí)行輸入指令時,CPU可從一個8位端口讀字節(jié)到AL中,兩連續(xù)8位端口讀一個字到AX中。 輸入指令相反。一類是直接的輸入輸出指令(2字節(jié))二類是間接的輸入輸出指令(1字節(jié))IN AL,50H ;將50H斷口的內(nèi)容讀入ALIN AX, 70H ; 將70H、71H兩端口的值讀入AX,70H到AL,71H到AHOUT 44H,AL ;將AL中的一個字節(jié)送44H端口OUT 80H,AX ;將AX中的內(nèi)容輸出到80H、81H兩端口以下是
16、間接輸入輸出例子:MOV DX,1230H ;只能用DX間接尋址IN AL, DX ;從DX所指的端口中讀取一個字節(jié)IN AX, DX ;從DX、DX+1所指兩端口讀一個字到AXOUT DX, AL ;將AL中的字節(jié)輸出到DX所指端口OUT DX, AX ;將AX中的一個字輸出到DX、DX+1兩端口輸入輸出指令,注意兩點:只能用累加器輸入輸出,不能用其他寄存器直接輸入輸出指令,端口0255,25665535,DX間址表3.6 IBM PC 系列機的部分端口地址芯片或外設(shè)的端口實際占用的端口數(shù)目端口號范圍(HEX)8237DMA控制器1600-0F8259A中斷控制器220-27硬盤控制器163
17、20-32F軟盤控制器83F03F7并行打印機2378-37F換碼指令碼制轉(zhuǎn)換XLAT 換碼指令將累加器中的值變換為內(nèi)存表格中的某一個值XLAT之前,事先把BX寄存器指向表的起始有效地址,AL中為表中某一項與表首的偏移量圖4.5 換碼指令的執(zhí)行過程舉例:0-9的七段LED共陽極顯示段碼表MOV BX,OFFSET MM0MOV AL,5XLAT 即可實現(xiàn)5到12H的轉(zhuǎn)換Al只有8位,表最多只能256字節(jié)地址傳送指令LEA LDS LES取有效地址指令LEA功能是將存儲器地址送到一個寄存器LEA AX,2728 ;將內(nèi)存單元的偏移量2728送入AXLEA BX,BP+SI ;BP+SI BXLE
18、A SP, 0482 ;482 SP LEA SI,VALUE ;OFFSET VALUE SI將地址指針裝入DS和令一個寄存器的指令LDS指令的功能是4個字節(jié)的地址指針(段地址偏移量)裝入DS,REG其中后二字節(jié)即段地址入DS,目的是要進行循環(huán)類操作LDS DI,DISPBX ;(DISP+BX) DI(DISP+BX)+2 DSLDS SI,1000H ;(1000H)(1001H) SI (1002H)(1003H) DS將地址指針裝入ES和另一個寄存器的指令舉例:進入子程序FFIT之前堆棧頂部存放著字符串首址。FFIT:PUSH BP ;保存BPMOV BP,SP ;將BP作為堆棧指針
19、PUSH ESPUSH DILES DI,BP+04;將棧中(BP+4)開始的4單元送DI ESCALL DISP LDS、LES這二條指令有個共同特點源操作數(shù)總是來自存儲器,但存儲器地址可直接給出,也可寄存器(偏移量)間接指出。寄存器不能作原操作數(shù)。標志傳送指令讀出標志或設(shè)置新值讀取標志指令LAHF(Load AH with Flags)將標志寄存器中的低8位傳送到AH中 。 LAHF指令的功能 設(shè)置標志指令SAHF(Send AH to Flags)功能與LAHF相反,AH相應(yīng)位傳到FLAG的低8位中LAHF、SAHF主要是為了與80808085兼容將FLAG推入堆棧和彈出堆棧的指令PUS
20、HF ; 將FLAG推入棧頂,SP2 POPF ; 從堆棧中彈出一個字到FLAG中,SP2PUSHF、POPF一般用于子程序、中斷處理程序首尾,保護標志用4.3.2算術(shù)運算指令算術(shù)運算指令涉及的一些問題算術(shù)運算指令涉及有符號數(shù)和無符號數(shù);無符號數(shù)的表示范圍,8位 0255 16位065535有符號數(shù)的表示范圍,128127 3276832767有符號數(shù)將最高位作為符號,數(shù)據(jù)本身用補碼表示,同為有符號或無符號的數(shù)相加,可用同一套加減法指令. 有無符號數(shù)不能使用同一套乘除法指令。為了找出無有符號數(shù)運算溢出規(guī)律,研究下列情況無論有無符號,51015 5(10)15均有意義無符號數(shù)82513 顯然不對
21、259255溢出CF=1有符號數(shù)+8+(-5)=+3 正確 正數(shù)加負數(shù)不會溢出, OF=0無符號8124132127, OF=1無符號數(shù)135245124,錯誤,135245255, 溢出,CF=1有符號數(shù)-121+(-11)=+124, 錯誤, -121-11=-1321時)SAL BH,CL;將BH中的值左移,必須用CL指出算術(shù)左移指令SAL(b)邏輯左移指令SHL 功能相同算術(shù)右移指令SAR (d)邏輯右移指令SHR循環(huán)移位指令4條循環(huán)移位指令不帶CF的循環(huán)左移指令ROL、循環(huán)右移指令ROR帶CF的循環(huán)左移指令RCL(rotate through CF left)循環(huán)右移指令RCR (a
22、)不帶CF的循環(huán)左移指令ROL 不帶CF的循環(huán)右移指令ROR(c)帶CF的循環(huán)左移指令RCL 帶CF的循環(huán)右移指令RCR例如:ROL AL,1;AL中的內(nèi)容不帶CF循環(huán)左移1位 RCR WORD PTR DI,CL;DI、DI+1單元帶CF循環(huán)右移CL位ROL、RCL指令在執(zhí)行一次左移后,若最高位和CF不等,OF=1溢出ROR、RCR指令在執(zhí)行一次右移后,若最高位和次高位不等OF=1溢出例如:AL中的內(nèi)容乘以10,可用移位指令實現(xiàn) SAL AL, 1;將AL中的數(shù)左移一位,得2XMOV BL,AL ;將2X 保存在BL中MOV CL,2 ;移位次數(shù)置入CL中SAL AL,CL ;2X左移2位,
23、得8XADD AL,BL;2X加上8X,所以AL中為10X串操作指令(5條)通過一條指令實現(xiàn)對一串字符或數(shù)據(jù)的操作,特點是:通過加重復前綴來實現(xiàn)串操作可對字節(jié)串,也可對字串進行操作所有串操作指令都用SI對源操作數(shù)間接尋址,并假定都在DS段中 都用DI對目的操作數(shù)間接尋址并假定都在ES段中串操作時,地址修改與方向標志DF有關(guān),DF=1,DI、SI自動減量修改。字符串傳送指令MOVSBMOVSW(move string)將位于DS段、SI指出的字節(jié)或字傳送到位于ES段DI單元,并修改SI和DI,從而指向下一個字節(jié)(1)或字(2)通常加重復前綴,例如:MOV SI,1000H;源地址為1000HMO
24、V DI,2000H;目的地址為2000HMOV CX,100 ;字符串長度100個字節(jié)CLD;方向標志清零,時指針按增量方向修改REP MOVSB 上面的程序段相當于下面的循環(huán)程序:MOV SI,1000H ;源地址為1000HMOV DI,2000H ;目的地址為2000HMOV CX,100 ;字節(jié)數(shù)為100KKK:MOVSB; 將源地址的一個字節(jié)傳送到目的地址單元DEC CX;字節(jié)數(shù)減1JNZ KKK;如未傳送完100個字節(jié),則繼續(xù)傳送 。 。MOVSB注意幾點:源地址用SI寄存器指出,默認在DS段;目的地址DI,默認ES段CX寄存器中指定字(節(jié))數(shù),MOVSBMOVSW一次,CX1如
25、用CLD將方向DF清0,MOVSB一次,SI、DI自動加1,MOVSW自動加2字符串比較指令CMPSB/CMPSW(compare string)CMPSB/CMPSW把DS段由SI所指的字節(jié)或字與ES:DI所指相比較,自動修改指針通過重復前綴,實現(xiàn)尋找第一個(不)相同元素舉例:加電標志“12”、“23”、“34”、“45”在RAM的400H單元是從ROM區(qū)0E2DH開始的4個單元復制過去的MOV DI,0400H;DI寄存器指向RAM區(qū)標志單元MOV SI,0E2DH;SI寄存器指向ROM區(qū)標志單元CLD ;清方向標志MOV CX,0004;計數(shù)器為4REPZ CMPSB;相等繼續(xù)比較下一字
26、節(jié),CX1, SI和DI1JZ DONE;如4個字節(jié)都符合,則說明加電標志已設(shè)好RET;否則返回DONE 。 。 后續(xù)處理CMPSB/CMPSW 幾點注意:預先將源字符串首地設(shè)置到DS:SI,目的地址ES:DI,次數(shù)CX,方向DF如用CMPSW,DF0,每比一次,地址加2,CX1指令前綴可以有REPNEREPNZ或REPEREPZ表示不等相等比較字符串檢索指令SCASBSCASW(scan string)SCASBSCASW將AL中的字節(jié)或AX中的字,與ES: DI所指單元比較,通過前綴,可以找到DI所指字符串中,第一個與AL、AX相等不相等者停止比較幾點注意:目的字符串指定用ES:DI指出退
27、出方式有二:找到退出,找不到退出,ZF不受CX影響取字符串指令LODSBLODSW(load string)LODSBLODSW將位于DS:SI所指的存儲單元的內(nèi)容(字節(jié)字)取到AL或AX中,取完后地址自動1/2(方向DF)LODSBLODSW前一般不加前綴,否則AL中只最后字節(jié),多用于循環(huán)程序中例子:將0700H開始的5個字節(jié)逐一取來在累加器中處理后送回CLD;方向標志清0MOV SI,0700H ;SI作為地址指針MOV CX,5;共處理5個字節(jié)LI:LODSB;取一個字節(jié)到AL中,并使地址1PUSH CX;保留計數(shù)值。 。;處理字符POP CX;恢復計數(shù)值DEC CX;計數(shù)值減1MOV
28、SI,AL;送回處理結(jié)果JNZ LI ;如未處理完,則繼續(xù)存字符串指令STOSB/STOSW(store string)STOSB/STOSW把AL或AX中的數(shù)存到ES:DI寄存器所指的內(nèi)存單元,并主動修改地址指針。加上REP前綴后可使一串內(nèi)存單元填相同數(shù)。例子: 下列程序段使0404H開始的單元清0CLD;清除方向標志LEA DI,0404H;將目的地址0404H送DIMOV CX,0080H ;共有128個字XOR AX,AX ;AX清零REP STOSW ;將256個字節(jié)清零控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令包括5類:。子程序調(diào)用和返回指令;。無條件轉(zhuǎn)移和條件轉(zhuǎn)移。循環(huán)控制指令。中斷指令。處理器控
29、制指令關(guān)于轉(zhuǎn)移指令和調(diào)用指令的尋址無條件轉(zhuǎn)移指令:段內(nèi)直接短轉(zhuǎn)移:JMP SHORT OPR 執(zhí)行操作:(IP) (IP) + 8位位移量段內(nèi)直接近轉(zhuǎn)移:JMP NEAR PTR OPR 執(zhí)行操作:(IP) (IP) + 16位位移量段內(nèi)間接轉(zhuǎn)移: JMP WORD PTR OPR 執(zhí)行操作: (IP) (EA)段間直接遠轉(zhuǎn)移:JMP FAR PTR OPR 執(zhí)行操作:(IP) OPR 的段內(nèi)偏移地址 (CS) OPR 所在段的段地址段間間接轉(zhuǎn)移: JMP DWORD PTR OPR 執(zhí)行操作: (IP) (EA) (CS) (EA+2)段內(nèi)直接轉(zhuǎn)移(條件轉(zhuǎn)移唯一適用128127)當前IP加上
30、一個8位16位位移量,也稱相對尋址。條件轉(zhuǎn)移8位,無條件轉(zhuǎn)移816位段內(nèi)間接轉(zhuǎn)移方式立即數(shù)方式除外用段內(nèi)間接轉(zhuǎn)移方式時,有效地址總是在寄存器或內(nèi)存單元中,適用無條件轉(zhuǎn)移。段間直接轉(zhuǎn)移方式指令給出段值和偏移量,分別入CS和IP。段間間接轉(zhuǎn)移方式段間轉(zhuǎn)移必須是無條件指令,IP和CS的內(nèi)容用內(nèi)存中2個連續(xù)的字替換例子:設(shè)BX=1256H , SI=528FH , 偏移量20A1H,CS=3000H。對于無條件轉(zhuǎn)移指令,用各種方法尋址時,有效地址計算如下:直接尋址: 20A1H30000H320A1H寄存器相對尋址(假定用BX):1256H20A1H30000H332F7H基址加變址尋址(假定用BX和
31、SI):1256H528FH30000H364E5H子程序調(diào)用和返回指令8086提供了段內(nèi)直接調(diào)用等4種調(diào)用指令。(1)段內(nèi)直接調(diào)用CALL FACT;段內(nèi)直接調(diào)用,調(diào)用地址在指令中給出 SPSP-2(SP+1,SP)IPIPIP+D16(2)段內(nèi)間接調(diào)用SPSP-2(SP+1,SP)IPIP(EA)或IPr16CALL AX;段內(nèi)間接調(diào)用,調(diào)用地址由AX給出(3)段間直接調(diào)用SPSP-2(SP+1,SP)CSSPSP-2(SP+1,SP)IPIP偏移地址(占指令的2、3字節(jié))CS段地址(占指令的4、5字節(jié))CALL FAR PTR (4)段間間接調(diào)用CALL DWORD PTRBXDICAL
32、L 2500H:3600H;段間直接調(diào)用,段地址和偏移量指令給出CALL DWORD PTR DI ;段間間接調(diào)用,調(diào)用地址在DI:DI+1 DI+2:DI+3所指單元,前2單元為偏移量調(diào)用指令在執(zhí)行時,會把下一條指令的地址推入堆棧返回地址段內(nèi)調(diào)用只把偏移量入棧;段間調(diào)用偏移量和段地址都入棧。和調(diào)用指令對應(yīng)的是返回指令。返回時如子程序是段內(nèi)返回,棧頂彈出2個字節(jié)作為返回地址的偏移量,段間4字節(jié)。段內(nèi)和段間返回指令都是RET,匯編時由偽指令區(qū)分代碼分別為C3(C2)和CBH(CAH)。帶參數(shù)的返回指令:RET n (n為偶數(shù)) 其中n為0FFFFH范圍中的任何一個偶數(shù)例如,RET 6 這條指令表
33、示從棧頂彈出返回地址后,SP6例子RET n 指令的使用DDD:PUSHBP;將的內(nèi)容推入堆棧 MOV BP,SP;使指向當前棧頂 PUSHES;保存ES的值 PUSHDI;保存DI的值 LESDI,BP+04;將字符串首址送到ES和DI中AAA:ES:MOV AL,DI;從ES和DI所指的單元中取字符 CMP AL,00;是否為字符串的結(jié)束符JZEEE;如未結(jié)束符,則轉(zhuǎn)EEEPUSHAX;保存字符(子程序中必有RET 2 騰出空間)CALLDISPLAY;調(diào)用顯示程序?qū)⒆址@示出來INCDI;指向下一個字符JMPAAA;對下一個字符進行處理EEE:POPDI;恢復DI的值POPES;恢復ES
34、的值POPBP;恢復BP的值RET0004;返回,并使堆棧指針加4RET返回指令多用于這一情況,主程序為某個子程序提供一定的參數(shù)或參數(shù)地址,進入子程序前,主程序?qū)⑦@些參數(shù)或參數(shù)地址先傳送到堆棧中,通過堆棧傳遞給子程序,子程序返回時,參數(shù)不必保存,用RET n 騰出空間條件轉(zhuǎn)移指令和無條件轉(zhuǎn)移指令一、無條件轉(zhuǎn)移指令可以轉(zhuǎn)到內(nèi)存中存放的任何程序段和調(diào)用指令類似,無條件轉(zhuǎn)移指令也有4種形式,實例如下:段內(nèi)直接轉(zhuǎn)移,轉(zhuǎn)移地址的偏移量由指令直接給出。段內(nèi)直接短轉(zhuǎn)移(短程轉(zhuǎn)移)格式:JMP SHORT操作:IPIP+D8。JMPSHORT CONT; 這是2字節(jié)指令。CONT:ADD BL,3EH。段內(nèi)直
35、接近轉(zhuǎn)移格式:JMP NEAR PTR操作:IPIP+D16這是個3字節(jié)指令,可與1統(tǒng)一寫成:JMP 段內(nèi)間接轉(zhuǎn)移格式:JMP WORD PTR opr操作:IPEA; 除立即數(shù)尋址外的任何尋址方式JMPCX;段內(nèi)間接轉(zhuǎn)移,轉(zhuǎn)移地址的偏移量由指令給出JMP WORD PTR DI;4.段間直接轉(zhuǎn)移格式:JMP FAR PTR 操作:IP標號所在段內(nèi)的段內(nèi)偏移地址CS標號所在段的段值5字節(jié)指令,2、3偏移量;4、5為段值。段間間接轉(zhuǎn)移格式:JMP DWORD PTR OPR操作:IP (EA)CS (EA+2)除立即數(shù)、寄存器尋址外的尋址方式JMP DWORD PTRSI;段間間接轉(zhuǎn)移,段地址和
36、偏移量放在SI、SI+1 SI+2、SI+3的4個單元中,前2為偏移量JMP DWORD PTR ALPHABXDI;二、條件轉(zhuǎn)移指令,以標志位判斷是否轉(zhuǎn)移,滿足條件則轉(zhuǎn)移條件轉(zhuǎn)移都是相對轉(zhuǎn)移128127內(nèi)(范圍很小)。相當一部分條件轉(zhuǎn)移指令是比較完2數(shù)大小后,根據(jù)比較結(jié)果定。無符號數(shù)比較結(jié)果:高于、低于。有符號數(shù)為大于、小于。8086條件轉(zhuǎn)移指令中,多數(shù)有兩種助記符,具體如下: JZJE;結(jié)果為零,則轉(zhuǎn)移JNE/JNZ;結(jié)果不為零,則轉(zhuǎn)移JGJNLE;大于,即不小于且不等于,則轉(zhuǎn)移JNG/JLEJL/JNGEJNL/JGEJB/JNAE;低于,即不高于且不等于,則轉(zhuǎn)移JNB/JAEJA/JN
37、BEJNA/JBE以上是根據(jù)2個數(shù)的比較結(jié)果來決定轉(zhuǎn)移,此外還有根據(jù)標志位的JS;符號標志SF為1,則轉(zhuǎn)移JNSJO;溢出標志OF為1,則轉(zhuǎn)移JNOJP;奇偶標志ODD/EVENJNP還有一條條件轉(zhuǎn)移指令是專門根據(jù)CX中的值來決定是否轉(zhuǎn)移:JCXZ;如CX中的值為0,則轉(zhuǎn)移應(yīng)用舉例:2000H開始放著14H個數(shù),找出最大的放到2000HGETMAX:MOV BX,2000H;BX指向2000H單元 MOVAL,BX;取第一個數(shù) MOVCX,14H;CX作為計數(shù)器P1: INCBX;BX指向下一個數(shù) CMPAL,BX ;和下一個數(shù)比較 JAEP2;MOV AL, BX;如下一個數(shù)大,則將下一個數(shù)
38、取到AL中。P2: DECCX;CX中計數(shù)值減1,如不為零,則轉(zhuǎn)P1JNZP1MOV BX,2000H;如已經(jīng)比較完畢,則使BX指向2000H MOVBX,AL ;將最大的一個數(shù)送到2000H單元循環(huán)控制指令循環(huán)控制指令控制范圍都在128127范圍內(nèi)LOOP指令LOOP指令執(zhí)行時,先將CX內(nèi)容減1,再判斷CX中是否為0,如不為0,則繼續(xù)循環(huán),如為0,則退出循環(huán),執(zhí)行下一條指令。可以想到,LOOP指令前,一定有對CX寄存器設(shè)置初值的指令。例子:最簡單的延時子程序(可精確定時) MOV CX,101 ;設(shè)置循環(huán)次數(shù)KKK:LOOP KKK ;CX減1,如不為0,則循環(huán) 。 。 ;后續(xù)處理LOOP指
39、令在產(chǎn)生循環(huán)時,用9個時鐘周期,退出循環(huán)時,用5個時鐘周期LOOPZ/LOOPE執(zhí)行時CX減1,并判ZF是否為1。如果ZF0,或者CX0,則退出循環(huán),只有在ZF1,且CX0情況下,才繼續(xù)循環(huán)。注意:CX中的值為0與否,不影響ZF,ZF由其他指令決定。例子:40個元素構(gòu)成的數(shù)組中尋找第一個非0元素MOV CX,28H;數(shù)組長度28H,即40個元素MOV SI,0FFH;數(shù)組元素序號從0開始,先設(shè)為FFHNEXT:INCSI;當前數(shù)組元素序號放在SI中CMP BYTE PTRSI,0;該指令影響ZF,判斷此元素是否為0LOOPZ NEXT ;當ZF1且CX0時再循環(huán)JNZOKK;當找到一個非0元素
40、時,轉(zhuǎn)OKKCALL DISPLAY1;如未找到任何非0元素,則轉(zhuǎn)顯示程序,顯示出錯信息,再返回RETOKK:CALL DISPLAY2;如找到非0元素,則轉(zhuǎn)顯示程序,顯示此元素,且返回 RETLOOPNELOOPNZ先使CX減1,當CX0且ZF=0時,繼續(xù)循環(huán),否則退出循環(huán),退出循環(huán)后,緊接著用JNZJZ判斷到底是什么原因退出循環(huán)的。5. 中斷指令和中斷返回指令*8086為系統(tǒng)提供了軟件中斷手段中斷指令I(lǐng)NT n 。所有中斷返回指令均為IRET,執(zhí)行時先彈出4個單元送IP、CS,再彈出PSW。*執(zhí)行INT n 指令時,將使CPU轉(zhuǎn)到一個中斷處理程序。此時,標志位被推入堆棧,SP2 ,IF、T
41、F置0,接著CPU將主程序的下一條指令地址即斷點地址推入堆棧,SP4。*中斷類型號4中斷向量,中斷向量表中每4個單元對應(yīng)一個中斷中斷向量的前2單元為中斷處理程序入口地址的偏移量,后2單元為段地址。例如:INT 21H 執(zhí)行時根據(jù)類型號,中斷向量存放在84H87H (03FFH),若其中分別存放著00、20、00、30,則CPU回轉(zhuǎn)到3000H:2000H單元去執(zhí)行中斷子程序。類型04為內(nèi)部中斷。0型:除數(shù)為0中斷,除數(shù)為0或有符號數(shù)相除所得商超過規(guī)定范圍時指令系統(tǒng)中沒有INT 0 。1型:單步中斷,由CPU測試TF1而產(chǎn)生,TF由傳輸指令設(shè)置。TF是由調(diào)試程序修改的,不是由被調(diào)試程序修改的。進
42、入單步中斷處理程序后,TF0,進入并連續(xù)執(zhí)行單步中斷子程序,具體就是顯示一些寄存器的值,單步計數(shù)單元減1等,完事兒后從堆棧中彈出PSW,TF又1再進單步,值到單步計數(shù)單元為0,使TF0退出單步。2型:NMI中斷。3型:斷點中斷,從一個較長的程序中分離出較小的程序設(shè)置斷點斷點中斷實際上是調(diào)試程序的一部分,主要功能是顯示一系列寄存器的值和其他重要信息。返回時要恢復被INT 3 替換掉的那條指令。可設(shè)置多個斷點。當程序中有轉(zhuǎn)移調(diào)用指令時,會出錯。怎樣避免呢?INT 3 與其它INT n 不同,是1字節(jié)指令,避免錯誤的替換。4型:溢出中斷,INTO如果無符號數(shù)運算過程使CF1或OF1,表示溢出,這是允
43、許的,如果有符號數(shù)運算時OF1,則出錯。INTO總是跟在有符號數(shù)的加減法運算指令之后,當運算使OF=1時,執(zhí)行INTO顯示出錯信息,當OF=0時,也進入,但很快退出。INTO是一字節(jié)。處理器控制指令暫停指令HLT指令經(jīng)常和中斷過程聯(lián)系在一起,此時CS和IP指向HLT后面的一條指令的地址,CPU則“什么也不干”等待外部中斷。如果來一個外部中斷,用兩個總線周期響應(yīng)中斷,即CS、IP、PSW入棧,CPU轉(zhuǎn)入中斷處理程序,返回后執(zhí)行HLT下一條指令,退出暫停狀態(tài)。標志操作指令8086指令操作系統(tǒng)中有幾條標志操作指令,可對CF、DF、IF置0、1STC、CLC、CMCCF置位、清零、取反STD、CLDD
44、F置1(地址減量修改)、清零STI、CLI IF置1(中斷允許)、清零交權(quán)指令和等待指令8086有一條CPU交權(quán)指令ESC,這條指令有何用處呢?8086可配8087和8089協(xié)處理器,8087浮點運算,8089輸入輸出協(xié)處理器協(xié)處理器在加電后不斷檢測是否需要自己協(xié)助工作,發(fā)現(xiàn)ESC指令后,馬上響應(yīng)ESC是CPU調(diào)動協(xié)處理器的聯(lián)絡(luò)手段。ESC指令是2字節(jié)指令,如圖3.14所示。11011XMODYR/MX、Y字段共6位,64種組合,以區(qū)分要那個協(xié)處理器工作。MOD、R/M字段指出存放在存儲器中的操作數(shù)。8086根據(jù)這些信息算出存儲器地址,從存儲器中讀出操作數(shù)并放到總線上,協(xié)處理器知道要進行什么操
45、作,又得到了操作數(shù),從而代替CPU工作。WAIT指令一般和ESC指令配合使用,ESC后CPU可并行工作。8086在執(zhí)行WAIT指令時,不斷測試CPU的TEST引腿。協(xié)處理器完成工作后,往8086的TEST引腿上發(fā)一個信號,結(jié)束等待。ESC后面也可緊跟WAIT,讓8086一直處于等待狀態(tài)。總線封鎖指令LOCK可放在任何指令前面,作為前綴,用了LOCK前綴后,CPU在執(zhí)行其后的指令時,會從LOCK引腿向外發(fā)出一個低電平信號,使其它處理器得不到控制權(quán),從而不能訪問存儲器或外設(shè)。這樣做的必要性?以及各處理器共享一臺打印機為例。測管理標志時:LOCK: TEST XX,XX第五章 匯編語言程序設(shè)計匯編語
46、言是一種符號語言,用助記符表示指令的操作碼,地址和數(shù)據(jù)也可用符號表示。比機器語言易于編寫、閱讀修改。但須經(jīng)“翻譯”成機器語言(或稱目標代碼)才能執(zhí)行。匯編程序有小匯編(ASM)和宏匯編(MASM)。匯編語言源程序經(jīng)過匯編(.obj)和連接得到可執(zhí)行文件(.exe)。5.1匯編語言程序格式舉一個簡單的例子:已知X19,Y=43,Z=11,求X+Y-ZDATA SEGMENTXDW19YDW43ZDW11RESULTDW?DATAENDSSTACK SEGMENTSTTTDB100DUP(?)STACK ENDSCODESEGMENTASSUME CS:CODE, SS:STACK, DS:DAT
47、ASTART: MOV AX,XADD AX,YSUB AX,ZMOV RESULT,AXCODEENDSEND START注意這只是一個概念性的程序,不能運行。許多輔助性的語句尚未加入,如段寄存器賦值等。5.1.1 匯編語言源程序的格式程序是分段結(jié)構(gòu),至少要有一個代碼段。NAME1 SEGMENT語句1語句nNAME1 ENDSNAME2 SEGMENT語句1語句mNAME2 ENDSNAMEk SEGMENT語句1語句jNAMEk ENDSEND5.1.2源程序語句的種類三種基本語句:指令語句:匯編后要產(chǎn)生機器碼的可執(zhí)行語句。偽指令語句:提供匯編信息匯編時處理,匯編后不產(chǎn)生指令代碼。如指定
48、程序或數(shù)據(jù)存放的起始地址數(shù)據(jù)段定義宏指令語句:把多次重復使用的程序段用宏偽操作命令定義為一個名字,可以當作指令一樣使用宏指令。5.2 語句行的構(gòu)成5.2.1幾個基本規(guī)定語句使用的字符集英文字母:大寫A-Z和小寫a-z;數(shù)字字符:0-9;算術(shù)運算符: * 關(guān)系運算符:;分隔符:, ( ) U(空格)、TAB(制表符)控制符:CR(回車)、LF(換行)、FF(換頁);其他字符:$ & _ ? . % !保留字所有的指令操作碼助記符:ADD、JCXZ、NOP、TEST、ROL等偽指令:ASSUME ENDP ORG DB LABAL PROC PUBLIC EQU等寄存器名:AX AH DI SI
49、SS 等其他保留字:ABS FAR LE LENGTH NEAR PARA SHORT THIS等標識符(又稱名字)程序員自行建立的自定義符號,用作標號、變量名、常量名、段名、過程名等。標識符以字母開頭,最多31個字符有效;可出現(xiàn)$ _ . ?等,有.時必須是第一個字符,?不單獨用不得包含空格,保留字不能用。正確:START,ABC,NOT_FIND,LOOP2,C_SEG,X,Y,2等錯誤:3FD6,Y+C,ADC,EQU,AH,等5.2.2源程序語句的格式指令性語句格式:標號:助記符號參數(shù)1,參數(shù)2;注釋偽指令語句格式:名字助記符 參數(shù)1 ,參數(shù)n;注釋標號標號是為語句起的名字;標號以冒號
50、結(jié)束;標號不一定每行都有,需要引用的才加標號;標號中若有數(shù)字,大小不代表執(zhí)行順序;同一程序中的兩個標號不得相同;標號代表本語句的符號地址,匯編時賦予實際值(存儲地址)標號有三種屬性:段屬性(SEGMENT):標號所在的段,SEG運算符求之CS偏移量(OFFSET):所在語句與段首的偏移量類型屬性(TYPE):又叫距離屬性,NEAR段內(nèi)引用FAR段間偽指令語句定義的名字偽指令中的名字:段名、過程名、常量變量名 屬于標識符常量名:用符號形式表示的常數(shù)。有數(shù)字、字符變量名:一個或一些存儲單元的符號地址,其內(nèi)容為變量的值。變量名下的一組數(shù)據(jù)數(shù)組。變量名也有三種屬性:段、偏移量、類型(字節(jié) 字 雙字等)
51、偽指令定義的名字后面沒有冒號。和機器語言相比,用匯編語言來編寫程序的突出優(yōu)點是可以使用符號助記符。匯編語言的指令和機器語言的指令之間有一一對應(yīng)的關(guān)系,匯編成的目標代碼程序容量為源程序的幾倍,匯編語言和機器密切相關(guān)。匯編語言可使程序員直接控制目標代碼,可對輸入輸出端口進行控制。實時性好,用于系統(tǒng)程序、實時通信程序、實時控制程序等,還可被各種高級語言嵌用。舉例:一個規(guī)范程序DATASEGMENT;數(shù)據(jù)段開始DA1DB2AH,6,33;DBPROGRAM ASMDB 40 DUP(?)BUFDMADB 80H DUP(?)DATAENDSSTACK SEGMENT;堆棧段開始ME1DB 80H DU
52、P(?)STACK ENDSCODESEGMENT;代碼段開始ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATAORG200HSTART:MOVAX,DATA ;MOVDS,AXMOVDX,OFFSET DA1;刪除同名文件MOVAH,13H;INT21HMOVDX,OFFSET BUFDMA;設(shè)置磁盤緩沖區(qū)MOVAH,1AH;INT21HMOVAX,OFFSET DA1+12;當前塊號為0MOVBX,AXMOVBX,0MOVSI,2000H ;設(shè)文件已在2000H開始的緩沖區(qū)MOVE:MOVDI,OFFSET BUFDMA;傳遞一個數(shù)據(jù)塊MOVCX,80HCLDP
53、USHCS;是CS和ES指向同一個段POPESREPMOVSB;執(zhí)行數(shù)據(jù)傳送MOVCX,80H;檢索是否遇到結(jié)束符MOVAL,1AH;Z的ASC碼MOVDI,OFFSET BUFDMAPUSHCSPOPESREPNZSCASB;檢索ZJZ CLOSE PUSH SI;保留數(shù)據(jù)區(qū)地址MOVDX,OFFSET DA1 ;寫一個記錄MOVAH,15H;INT21 POPSI恢復數(shù)據(jù)地址JMPMOVECLOSE:MOVDX,OFFSET,DA1;寫最后一個記錄MOVAH,15H;INT21HMOVDX,OFFSET DA1;關(guān)閉文件MOVAH,10HINT21HCODEENDSEND3. 界符一個程序
54、或一條指令中兩個部分之間的間隔,見表3.8表3.8 ASM86可用的界符;*,:+()*?./ 4. 常數(shù)指令中出現(xiàn)的固定值,如立即數(shù)、立即直接尋址時所用地址等。二進制表示:01011101B十進制表示:1996D或1996八進制表示:1267Q16進制表示:0F01AH浮點數(shù)表示:2.05E5字符串表示:STUDENTS相當于給出了ASC碼ASM86 規(guī)定常數(shù)不能以字母開頭,16進制數(shù)以AF開頭時添加05. 注釋匯編時不作處理匯編源程序為便于理解常加注釋,用;隔開,續(xù)航也應(yīng)用;開頭6.表達式操作數(shù)一個操作數(shù)在內(nèi)容上可能代表一個數(shù)據(jù),也可能代表一個存儲單元的地址,最簡單的數(shù)據(jù)是常數(shù),如100H
55、,也常用標號表示數(shù)據(jù) PORT存儲器地址也常用標記符(標號)表示,實際包含段值和偏移量。運算符操作數(shù)和運算符構(gòu)成表達式,有5類運算符。算術(shù)運算符(arithmetic operators)。邏輯運算符(logical operators)。關(guān)系運算符(relational operators)。分析運算符(analytic operators)。綜合運算符(synthetic operators)算術(shù)運算符加減乘除*和求兩數(shù)相除余數(shù)的MOD如20 MOD 3結(jié)果為2常用的地址運算操作是標號一個數(shù),地址相乘等無意義START+2 DA14邏輯運算符包括與.或.非.異或AND.OR.NOT.XOR
56、如:0FH OR 0F0H 0FFH 01H XOR 81H 80H注意:邏輯運算符只能對常數(shù)進行運算,結(jié)果也是常數(shù)。AND.OR.NOT.XOR既是助記符又是運算符,助記符在程序執(zhí)行時執(zhí)行邏輯運算符在匯編時執(zhí)行運算,不會混淆。例如:AND DX,PORT1 AND 0FEH 表示將DX中的內(nèi)容和邏輯與的結(jié)果相與,結(jié)果在DX中關(guān)系運算符相等EQ(equal)不等NE(no equal)小于LT(less than)大于GT(greater than)小于等于LE(less than or equal)大于等于GE(greater than or equal)如 PORT LE 5 中,含有關(guān)系
57、運算符要指出的是參與關(guān)系運算的兩個操作數(shù)必須是數(shù)據(jù),或是同一段中的存儲單元地址,關(guān)系成立,結(jié)果為FFFFH,否則0MOV AX,2 GE 3;因為2 GE 3不成立,結(jié)果為0,相當于MOV AX,0關(guān)系運算符不能單獨使用,與邏輯運算符組合使用,比如:MOV BX,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30)當PORT小于5時,則匯編后上面語句相當于MOV BX,20否則相當于MOV BX,30分析運算符和綜合運算符分析運算符把存儲單元地址分解為段地址和偏移量以及求取性質(zhì)OFFSET、 SEG 、TYPE、 SIZE、 LENGTH綜合運算符規(guī)定存儲單元的性質(zhì)PT
58、R(BYTE/WORD) 、THISOFFSET 用來取地址的偏移量,如:MOV DX,OFFSET DA1此語句將DA1處的地址的偏移量取到DX中SEG運算符用來取存儲單元地址的段值,如:MOV AX,SEG ABCMOV DS,AX這兩個語句使得DS中存放對應(yīng)于ABC的段地址TYPE用來取存儲單元的類型如KKK存儲區(qū)是用偽指令:KKK DB 20 DUP(?)來定義的,那么TYPE KKK 等于1LENGTH用來計算一個存儲區(qū)中的元素(字節(jié) 字 雙字)數(shù)目。SIZE用來計算一個存儲區(qū)的字節(jié)總數(shù)。偽指令定義如下:DA1 DD 20 DUP(?) 則TYPE DA1等于4LENTH DA1等于
59、20SIZE DA1等于80綜合運算符有PTR、THISPTR用來對存儲單元規(guī)定類型,常與偽指令BYTE、WORD聯(lián)用MOV WORD PTRDI,01將使DI單元為01,DI+1單元為00PTR也用來更改已經(jīng)規(guī)定了類型的存儲單元的類型,如原先定義:HHH DB 20 DUP(?)即HHH作為20個字節(jié)的存儲區(qū)可更改為:PP EQU BYTE PTR HHHQQ EQU WORD PTR HHH2KK EQU DWORD PTR HHH8前2字節(jié)仍為字節(jié)單元,中6字節(jié)3個字,后12字節(jié)放3個雙字THIS和PTR類似,也可改變存儲區(qū)類型比如,希望存儲區(qū)XYZ既可作為字類型,有可作為字節(jié)類型,可在
60、XYZ的類型語句:XYZ DW ?之前,加上兩個含運算符THIS的語句,變成:XYZ_2 EQU THIS BYTEXYZ_1 EQU THIS DWORDXYZ DW 10 DUP (?)因為XYZ_1、XYZ_2和XYZ具有相同的段地址和偏移量,所XYZ: 存儲單元為字類型XYZ_1:雙字類型因此上面3句相當于:XYZ DW ?XYZ_1 EQU DWORD PTR XYZXYZ_2 EQU BYTE PTR XYZ+15.2.3偽指令ASM-86約有20條偽指令,常用的有:。標號賦值偽指令EQU。定義存儲單元偽指令DB、DW、DD。定義存儲單元類型偽指令BYTE、WORD、DWORD。段
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年足球裁判員考試重難點試題及答案
- 游泳救生員資格考試常見問題解析的試題及答案
- 2024游泳救生員獨特視角試題及答案
- 2024年農(nóng)業(yè)植保員考試溝通能力需求與試題
- 2024年籃球裁判員的持續(xù)學習試題及答案
- 風電開發(fā)工程可行性研究報告
- 農(nóng)作物繁育項目管理試題及答案
- 優(yōu)化2024年籃球裁判員考試復習的具體步驟 試題及答案
- 2024年游泳救生員新興技能試題及答案
- 比賽中裁判員的角色與任務(wù)試題及答案
- 2024-2025年江蘇專轉(zhuǎn)本英語歷年真題(含答案)
- 山東科技大學離散數(shù)學復習題
- 高壓氧護理進修匯報
- 第二單元 第八課 巧用藍牙做工具 說課稿2024-2025學年人教版(2024)初中信息科技八年級上冊
- 《新時代提升基層治理能力的根本路徑》課件
- 產(chǎn)品審核程序(含表格)
- 2024屆清華大學強基計劃數(shù)學學科筆試試題(附答案)
- 5、科技成果轉(zhuǎn)化的組織實施與激勵獎勵制度
- 全國統(tǒng)一規(guī)范電子稅務(wù)局概況介紹及操作輔導
- 工商企業(yè)管理畢業(yè)論文范文(4篇)
- 浙江省杭州市(2024年-2025年小學三年級語文)人教版開學考試(上學期)試卷(含答案)
評論
0/150
提交評論