第3章 指令系統(tǒng)(2)_第1頁
第3章 指令系統(tǒng)(2)_第2頁
第3章 指令系統(tǒng)(2)_第3頁
第3章 指令系統(tǒng)(2)_第4頁
第3章 指令系統(tǒng)(2)_第5頁
已閱讀5頁,還剩101頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1. 邏輯運算指令 雙操作數(shù)邏輯指令AND、OR、XOR和TEST設置CFOF0,根據(jù)結果設置SF、ZF和PF狀態(tài),而對AF未定義;它們的操作數(shù)組合與ADD、SUB等一樣:運算指令助記符 reg, imm/reg/mem運算指令助記符 mem, imm/reg 單操作數(shù)邏輯指令NOT不影響標志位,操作數(shù)與INC、DEC和NEG一樣:NOT reg/mem.邏輯與指令AND 對兩個操作數(shù)執(zhí)行邏輯與運算,結果送目的操作數(shù)AND dest,srcAND dest,src;destdestdestdestsrcsrc 只有相只有相“與與”的兩位的兩位都是都是1,結果才是,結果才是1;否;否則,則,“與

2、與”的結果為的結果為0.邏輯或指令OR 對兩個操作數(shù)執(zhí)行邏輯或運算,結果送目的操作數(shù)OR dest,srcOR dest,src;destdestdestdestsrcsrc只要相只要相“或或”的兩位的兩位有一位是有一位是1,結果就是,結果就是1;否則,結果為;否則,結果為0.邏輯異或指令XOR 對兩個操作數(shù)執(zhí)行邏輯異或運算,結果送目的操作數(shù)XOR dest,srcXOR dest,src;destdestsrcdestdestsrc只有相只有相“異或異或”的兩的兩位不相同,結果才是位不相同,結果才是1;否則,結果為否則,結果為0 .測試指令TEST 對兩個操作數(shù)執(zhí)行邏輯與運算,結果并不送目的

3、操作數(shù),僅按AND指令影響標志TEST dest,srcTEST dest,src;destsrcdestsrc AND與與TEST 指令的關系,指令的關系,同同SUB與與CMP 指令的關系一樣指令的關系一樣.邏輯非指令NOT 對一個操作數(shù)執(zhí)行邏輯非運算NOT reg/memNOT reg/mem;reg/memreg/memreg/memreg/mem 按位取反,原來按位取反,原來是是“0”的位變?yōu)榈奈蛔優(yōu)椤?”;原來是;原來是“1”的位變?yōu)榈奈蛔優(yōu)椤?”例 邏輯運算mov al,75h;AL75Hand al,32h;AL30H;CFOF0, SF0,ZF0,PF1or al,71h;AL

4、71H;CFOF0,SF0,ZF0,PF1xor al,0f1h;AL80H;CFOF0,SF1,ZF0,PF0not al;AL7FH,標志不變例 邏輯運算指令的應用and bl,11110110b;BL中D0和D3清0,其余位不變or bl,00001001b;BL中D0和D3置1,其余位不變 AND指令可用于復位某些位(與指令可用于復位某些位(與0相與),不影響其它位相與),不影響其它位 OR指令可用于置位某些位(與指令可用于置位某些位(與1相或),不影響其它位相或),不影響其它位2.移位指令 將操作數(shù)移動一位或多位,分成邏輯移位和算術移位,分別具有左移或右移操作 移位指令的第一個操作數(shù)

5、是指定的被移位的操作數(shù),可以是寄存器或存儲單元;后一個操作數(shù)表示移位位數(shù):該操作數(shù)為1,表示移動一位該操作數(shù)為CL,CL寄存器值 表示移位位數(shù) (移位位數(shù)大于1只能用CL表示) 按照移入的位設置進位標志CF,根據(jù)移位后的結果影響SF、ZF、PF.邏輯左移指令SHL SH L reg/mem,1/C L;reg/mem左移1或CL位;最低位補0,最高位進入CF演示演示.邏輯右移指令SHRSH R reg/mem,1/CL;reg/mem右移1/CL位;最高位補0,最低位進入CF演演示示.算術左移指令SALSAL reg/mem,1/CL;與SH L是同一條指令演示演示.算術右移指令SARSAR

6、reg/mem,1/CL;reg/mem右移1/CL位;最高位不變,最低位進入CF演演示示例 數(shù)據(jù)移位mov dx,60 75h;DX01100000 01110101Bshl dx,1;DX11000000 11101010B;CF0,SF1、ZF0、PF0sar dx,1;DX11100000 01110101B;CF0,SF1、ZF0、PF0shr dx,1;DX01110000 00111010B;CF1,SF0、ZF0、PF1mov cl,4;CL4,標志不變sar dx,cl;DX00000111 00000011B;CF1,SF0、ZF0、PF1例 將AL寄存器中的無符號數(shù)乘以1

7、0 xor ah,ah;實現(xiàn)AH0,同時使CF0shl ax,1;AX2ALmov bx,ax;BXAX2ALshl ax,1;AX4ALshl ax,1;AX8ALadd ax,bx;AX8AL2AL10AL 邏輯左移一位相當于無符號數(shù)乘以邏輯左移一位相當于無符號數(shù)乘以2 邏輯右移一位相當于無符號數(shù)除以邏輯右移一位相當于無符號數(shù)除以2sub ah,ahand ah,03.循環(huán)移位指令 循環(huán)移位指令類似移位指令,但要將從一端移出的位返回到另一端形成循環(huán)。分為:ROL reg/mem,1/CL;不帶進 位循 環(huán)左 移ROR reg/mem,1/CL;不帶進 位循 環(huán)右 移RCL reg/mem,

8、1/CL;帶進 位循 環(huán)左 移RCR reg/mem,1/CL;帶進 位循 環(huán)右 移 循環(huán)移位指令的操作數(shù)形式 與 移位指令相同,按指令功能設置進位標志CF,但不影響SF、ZF、PF、AF 標 志演演示示演演示示演演示示演演示示3.4.4 串操作指令 串操作指令是8086指令系統(tǒng)中比較獨特的一類指令,采用比較特殊的數(shù)據(jù)串尋址方式,在操作主存連續(xù)區(qū)域的數(shù)據(jù)時,特別好用,因而常用重點掌握:MOVS STOS LODSCMPS SCAS REP一般了解:REPZ/REPE REPNZ/REPNE1、串數(shù)據(jù)類型 串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串(String)即在連續(xù)的主存區(qū)域中,字節(jié)或字的

9、序列 串操作指令的操作對象是以字(W)為單位的字串,或是以字節(jié)(B)為單位的字節(jié)串2、串尋址方式 源操作數(shù)用寄存器SI尋址,默認在數(shù)據(jù)段DS中,但允許段重設:DS:SI 目的操作數(shù)用寄存器DI尋址,默認在附加段ES中,不允許段重設:ES:DI 每執(zhí)行一次串操作指令,SI和DI將自動修改:1(對于字節(jié)串)或2(對于字串)執(zhí)行指令CLD指令后,DF = 0,地址指針增1或2執(zhí)行指令STD指令后,DF = 1,地址指針減1或23、串傳送MOVS(move string) 把字節(jié)或字操作數(shù)從主存的源地址傳送至目的地址MOVSBMOVSB;字節(jié)串傳送:;字節(jié)串傳送:ES:DIDS:SIES:DIDS:S

10、I;SISISISI1 1,DIDIDIDI1 1MOVSWMOVSW;字串傳送:;字串傳送:ES:DIDS:SIES:DIDS:SI;SISISISI2 2,DIDIDIDI2 2例:字節(jié)串傳送mov si,offset sourcemov di,offset destinationmov cx,100;cx傳送次數(shù)cld;置DF=0,地址增加again:movsb;傳送一個字節(jié)dec cx;傳送次數(shù)減1jnz again;判斷傳送次數(shù)cx是否為0;不為0,則到again位置執(zhí)行指令;否則,結束offsetoffset是匯編操作符,是匯編操作符,求出變量的偏移地址求出變量的偏移地址例:字串傳

11、送mov si,offset sourcemov di,offset destinationmov cx,50;cx傳送次數(shù)cld;置DF=0,地址增加again:movsw;傳送一個字dec cx;傳送次數(shù)減1jnz again;判斷傳送次數(shù)cx是否為0;不為0,則到again位置執(zhí)行指令;否則,結束4、串比較CMPS(compare string) 將主存中的源操作數(shù)減去至目的操作數(shù),以便設置標志,進而比較兩操作數(shù)之間的關系CMPSBCMPSB;字節(jié)串比較:;字節(jié)串比較:DS:SIDS:SIES:DIES:DI;SISISISI1 1,DIDIDIDI1 1CMPSWCMPSW;字串比較:

12、;字串比較:DS:SIDS:SIES:DIES:DI;SISISISI2 2,DIDIDIDI2 2例:比較字符串mov si,offset string1mov di,offset string2mov cx,countcldagain:cmpsb;比較兩個字符jnz unmat;有不同字符,轉移 mov al,0;字符串相等,設置00hjmp output;轉向outputdec cxjnz again;進行下一個字符比較unmat:mov al,0ffh;設置ffhoutput:mov result,al;輸出結果標記5、串掃描SCAS(scan string) 將AL/AX減去至目的操

13、作數(shù),以便設置標志,進而比較AL/AX與操作數(shù)之間的關系SCASBSCASB;字節(jié)串掃描:;字節(jié)串掃描:ALALES:DIES:DI;DIDIDIDI1 1SCASWSCASW;字串掃描:;字串掃描:AXAXES:DIES:DI;DIDIDIDI2 2例:查找字符串mov di,offset stringmov al,20hmov cx,countcldagain:scasb;搜索jz found;為0(ZF=1),發(fā)現(xiàn)空格dec cx;不是空格jnz again;搜索下一個字符.;不含空格,則繼續(xù)執(zhí)行found:.6、串裝入LODS(load string) 把指定主存單元的數(shù)據(jù)傳送給AL或

14、AXLODSBLODSB;字節(jié)串讀?。?;字節(jié)串讀取:ALDS:SIALDS:SI;SISISISI1 1LODSWLODSW;字串讀?。?;字串讀取:AXDS:SIAXDS:SI;SISISISI2 27、串存儲STOS(store string) 把AL或AX數(shù)據(jù)傳送至目的地址STOSBSTOSB;字節(jié)串存儲:;字節(jié)串存儲:ES:DIALES:DIAL;DIDIDIDI1 1STOSWSTOSW;字串存儲:;字串存儲:ES:DIAXES:DIAX;DIDIDIDI2 2例:串存儲mov ax,0mov di,0mov cx,8000h;cx傳送次數(shù)(321024)cld;DF=0,地址增加ag

15、ain:stosw;傳送一個字dec cx;傳送次數(shù)減1jnz again;傳送次數(shù)cx是否為08、重復前綴指令(repeat) 串操作指令執(zhí)行一次,僅對數(shù)據(jù)串中的一個字節(jié)或字量進行操作。但是串操作指令前,都可以加一個重復前綴,實現(xiàn)串操作的重復執(zhí)行。重復次數(shù)隱含在CX寄存器中 重復前綴分兩類,3條指令:配合不影響標志的MOVS、STOS(和LODS)指令的REP前綴配合影響標志的CMPS和SCAS指令的REPZ和REPNZ前綴、REP重復前綴指令REPREP;每執(zhí)行一次串指令,;每執(zhí)行一次串指令,CXCX減減1 1;直到;直到CXCX0 0,重復執(zhí)行結束,重復執(zhí)行結束 REP前綴可以理解為:當

16、數(shù)據(jù)串沒有結束(CX0 ),則繼續(xù)傳送重復串傳送mov si,offset sourcemov di,offset destinationmov cx,100 ;cx傳送次數(shù)cldrep movsbagain:movsb;傳送一個字節(jié)dec cx;傳送次數(shù)減1jnz again;判斷傳送次數(shù)cx是否為0;不為0(ZF=0),則轉移again位置執(zhí)行;否則,結束重復串存儲mov ax,0mov di,0mov cx,8000hcldrep stoswagain:stosw;傳送一個字dec cx;傳送次數(shù)減1jnz again;判斷傳送次數(shù)cx是否為0、REPZ重復前綴指令REPZREPZ;每執(zhí)

17、行一次串指令,;每執(zhí)行一次串指令,CXCX減減1 1;并判斷;并判斷ZFZF是否為是否為0 0,;只要;只要CXCX0 0或或ZFZF0 0,重復執(zhí)行結束,重復執(zhí)行結束 REPZ/REPE前綴可以理解為:當數(shù)據(jù)串沒有結束(CX0),并且串相等(ZF1),則繼續(xù)比較、REPNZ重復前綴指令REPNZREPNZ;每執(zhí)行一次串指令,;每執(zhí)行一次串指令,CXCX減減1 1;并判斷;并判斷ZFZF是否為是否為1 1,;只要;只要CXCX0 0或或ZFZF1 1,重復執(zhí)行結束,重復執(zhí)行結束 REPNZ/REPNE前綴可以理解為:當數(shù)據(jù)串沒有結束(CX0 ),并且串不相等(ZF 0 ),則繼續(xù)比較例:比較字

18、符串mov si,offset string1mov di,offset string2mov cx,countcldrepz cmpsb;重復比較兩個字符jnz unmat;字符串不等,轉移mov al,0;字符串相等,設置00hjmp output;轉向outputunmat:mov al,0ffh;設置ffhoutput:mov result,al;輸出結果標記例:查找字符串mov di,offset stringmov al,20hmov cx,countcldrepnz scasb;搜索jz found;為0(ZF=1),發(fā)現(xiàn)空格.;不含空格,則繼續(xù)執(zhí)行found: .3.4.5 控

19、制傳送類指令 控制傳送類指令用于實現(xiàn)分支、循環(huán)、過程等程序結構,是僅次于傳送指令的常用指令 控制轉移類指令通過改變控制轉移類指令通過改變IP(和(和CS)值,)值,實現(xiàn)程序執(zhí)行順序的改變實現(xiàn)程序執(zhí)行順序的改變目標地址的尋址方式 相對尋址方式指令代碼中提供目的地址相對于當前IP的位移量,轉移到的目的地址(轉移后的IP值)就是當前IP值加上位移量 直接尋址方式指令代碼中提供目的邏輯地址,轉移后的CS和IP值直接來自指令操作碼后的目的地址操作數(shù) 間接尋址方式指令代碼中指示寄存器或存儲單元,目的地址從寄存器或存儲單元中間接獲得目標地址的尋址范圍:段內尋址 段內轉移近轉移(near)在當前代碼段64KB

20、范圍內轉移( 32KB范圍)不需要更改CS段地址,只要改變IP偏移地址 段內轉移短轉移(short)轉移范圍可以用一個字節(jié)表達,在段內128127范圍的轉移代碼段代碼段代碼段代碼段目標地址的尋址范圍:段間尋址 段間轉移遠轉移(far)從當前代碼段跳轉到另一個代碼段,可以在1MB范圍需要更改CS段地址和IP偏移地址目標地址必須用一個32位數(shù)表達,叫做32位遠指針,它就是邏輯地址 實際編程時,匯編程序會根據(jù)目標地址的實際編程時,匯編程序會根據(jù)目標地址的屬性,自動處理成短轉移、近轉移或遠轉移屬性,自動處理成短轉移、近轉移或遠轉移 程序員可用操作符程序員可用操作符short、near ptr 或或fa

21、r ptr 強制成為需要的轉移類型強制成為需要的轉移類型代碼段代碼段代碼段代碼段1.子程序指令 子程序是完成特定功能的一段程序 當主程序(調用程序)需要執(zhí)行這個功能時,采用CALL調用指令轉移到該子程序的起始處執(zhí)行 當運行完子程序功能后,采用RET返回指令回到主程序繼續(xù)執(zhí)行 轉移指令有去無回轉移指令有去無回 子程序調用需要返回,子程序調用需要返回,其中利用堆棧保存返回地址其中利用堆棧保存返回地址演演示示. 子程序調用指令CALL CALL指令分成4種類型CALL label;段內調用、直接尋址CALL r16/m16;段內調用、間接尋址CALL far ptr label;段間調用、直接尋址C

22、ALL far ptr mem;段間調用、間接尋址CALL指令需要保存返回地址:n段內調用入棧偏移地址IPSPSP2,SS:SPIPn段間調用入棧偏移地址IP和段地址CSSPSP2,SS:SPCSSPSP2,SS:SPIP. 子程序返回指令RET根據(jù)段內和段間、有無參數(shù),分成4種類型RET;無參數(shù)段內返回RET i16;有參數(shù)段內返回RET;無參數(shù)段間返回RET i16;有參數(shù)段間返回需要彈出CALL指令壓入堆棧的返回地址n段內返回出棧偏移地址IPIPSS:SP, SPSP2n段間返回出棧偏移地址IP和段地址CSIPSS:SP,SPSP2CSSS:SP,SPSP22.無條件轉移指令JMP la

23、belJMP label;程序轉向;程序轉向labellabel標號指定的地址標號指定的地址 只要執(zhí)行無條件轉移指令JMP,就使程序轉到指定的目標地址,從目標地址處開始執(zhí)行指令 操作數(shù)label是要轉移到的目標地址(目的地址、轉移地址) JMP指令分成4種類型: 段內轉移、相對尋址段內轉移、相對尋址 段內轉移、間接尋址段內轉移、間接尋址 段間轉移、直接尋址段間轉移、直接尋址 段間轉移、間接尋址段間轉移、間接尋址無條件轉移指令JMP(jump) JMP label;段內轉移、相對尋址;IPIP位移量 JMP r16/m16;段內轉移、間接尋址;IPr16/m16 JMP far ptr labe

24、l;段間轉移、直接尋址;IP偏移地址,CS段地址 JMP far ptr mem;段間轉移,間接尋址;IPmem,CSmem2演演示示演演示示演演示示演演示示演演示示3.條件轉移指令 條件轉移指令Jcc根據(jù)指定的條件確定程序是否發(fā)生轉移。其通用格式為:Jcc label;條件滿足,發(fā)生轉移;IPIP8位位移量;否則,順序執(zhí)行 label是一個標號、一個8位位移量,表示Jcc指令后的那條指令的偏移地址,到目標指令的偏移地址的地址位移 label只支持短轉移的相對尋址方式4.Jcc指令 Jcc指令不影響標志,但要利用標志(表) 根據(jù)利用的標志位不同,分成三種情況: 判斷單個標志位狀態(tài) 比較無符號數(shù)

25、高低 比較有符號數(shù)大?。?).判斷單個標志位狀態(tài) JZ/JE和JNZ/JNE利用 零標志 ZF,判斷結果是否為零(或相等)JS和JNS利用符號標志SF,判斷結果是正是負JO和JNO利用溢出標志OF,判斷結果是否產生溢出JP/JPE和JNP/JPO利用奇偶標志PF,判斷結果中“1”的個數(shù)是偶是奇JC/JB/JNAE和JNC/JNB/JAE利用進位標志CF,判斷結果是否進位或借位例題 題目:將AX中存放的無符號數(shù)除以2,如果是奇數(shù)則加1后除以2 問題:如何判斷AX中的數(shù)據(jù)是奇數(shù)還是偶數(shù)? 解答:判斷AX最低位是“0”(偶數(shù)),還是“1”(奇數(shù))??梢杂梦徊僮黝愔噶?:用邏輯與指令將除最低位外的其他

26、位變成0,保留最低位不變。判斷這個數(shù)據(jù)是0,AX就是偶數(shù);否則,為奇數(shù)2:將最低位用移位指令移至進位標志,判斷進位標志是0,AX就是偶數(shù);否則,為奇數(shù)3:將最低位用移位指令移至最高位(符號位),判斷符號標志是0,AX就是偶數(shù);否則,為奇數(shù)例題解答1 :用JZ指令實現(xiàn)test ax,01h;測試AX的最低位D0(不用AND指令,以免改變AX)jz even;標志ZF1,即D00:AX內是偶數(shù),程序轉移add ax,1;標志ZF0,即D01:AX內的奇數(shù),加1even:shr ax,1;AXAX2例題解答2 :用JNC指令實現(xiàn)mov bx,axshr bx,1;將AX的最低位D0移進CFjnc e

27、ven;標志CF0,即D00:AX內是偶數(shù),程序轉移add ax,1;標志CF1,即D01:AX內的奇數(shù),加1even:shr ax,1;AXAX2還可用還可用SAR、ROR和和RCR指令指令例題解答3 :用JNS指令實現(xiàn)mov bx,axror bx,1;將AX的最低位D0移進最高位jns even;標志SF0,即D00:AX內是偶數(shù),程序轉移add ax,1;標志SF1,即D01:AX內的奇數(shù),加1even:shr ax,1;AXAX2ADD BX,0;增加一條指令;增加一條指令錯誤!錯誤!循環(huán)指令不影響循環(huán)指令不影響SF等標志等標志例:判斷是否為字母Y;寄存器AL中是字母Y(含大小寫),

28、則令AH0,否則令AH1cmp al,y;比較AL與小寫字母yje next;相等,轉移cmp al,Y ;不相等,;繼續(xù)比較AL與大寫字母Yje next;相等,轉移mov ah,-1;不相等,令AH1jmp done;無條件轉移指令next:mov ah,0;相等的處理:令AH0done:(2). 比較無符號數(shù)高低 無符號數(shù)的大小用高(Above)、低(Below)表示,需要利用CF確定高低、利用ZF標志確定相等(Equal) 兩數(shù)的高低分成4種關系,對應4條指令JB(JNAE):目的操作數(shù)低于(不高于等于)源操作數(shù)JNB(JAE):目的操作數(shù)不低于(高于等于)源操作數(shù)JBE(JNA):目

29、的操作數(shù)低于等于(不高于)源操作數(shù)JNBE(JA):目的操作數(shù)不低于等于(高于)源操作數(shù)(3). 比較有符號數(shù)大小 判斷有符號數(shù)的大(Greater)、小(Less),需要組合OF、SF標志、并利用ZF標志確定相等與否 兩數(shù)的大小分成4種關系,分別對應4條指令JL(JNGE):目的操作數(shù)小于(不大于等于)源操作數(shù)JNL(JGE):目的操作數(shù)不小于(大于等于)源操作數(shù)JLE(JNG):目的操作數(shù)小于等于(不大于)源操作數(shù)JNLE(JG):目的操作數(shù)不小于等于(大于)源操作數(shù)例:求較大值cmp ax,bx;比較AX和BXjae next;若AXBX,轉移xchg ax,bx;若AXBX,交換nex

30、t:mov wmax,ax如果如果AX和和BX存放的是有符號數(shù),存放的是有符號數(shù),則條件轉移指令應采用則條件轉移指令應采用JGE指令指令例:求較大值(另解)cmp ax,bx;比較AX和BXjae nextmov wmax, bx;若AXBX,wmaxBXjmp donenext:mov wmax,ax;若AXBX,wmaxAXdone:例:求較大值(另解對比)cmp ax,bx;比較AX和BXjbe nextmov wmax, ax;若AXBX,wmaxAXjmp donenext:mov wmax,bx;若AXBX,wmaxBXdone:5.循環(huán)指令 一段代碼序列多次重復執(zhí)行就是循環(huán) 80

31、88設計有針對CX計數(shù)器的計數(shù)循環(huán)指令LOOP label;循環(huán)指令;首先CXCX1;然后判斷;若CX0,轉移JCXZ label;為0循環(huán)指令:如果CX0,則轉移 label操作數(shù)采用相對短尋址方式 還有LOOPZ/LOOPE和LOOPNZ/LOOPNE兩條指令dec cxjnz label例:數(shù)據(jù)塊傳送(字節(jié))mov cx,400h;設置循環(huán)次數(shù):1K1024400Hmov si,offset sbuf;設置循環(huán)初值:SI指向數(shù)據(jù)段源緩沖區(qū)開始mov di,offset dbuf;DI指向附加段目的緩沖區(qū)開始(附加段)again:mov al,si;循環(huán)體:實現(xiàn)數(shù)據(jù)傳送mov es:di,

32、al;每次傳送一個字節(jié)inc si;SI和DI指向下一個單元inc diloop again;循環(huán)條件判定:循環(huán)次數(shù)減1,不為0轉移(循環(huán))例:數(shù)據(jù)塊傳送(字)mov cx,200h;設置循環(huán)次數(shù):1K2200Hmov si,offset sbuf;設置循環(huán)初值:SI指向數(shù)據(jù)段源緩沖區(qū)開始mov di,offset dbuf;DI指向附加段目的緩沖區(qū)開始(附加段)again:mov ax,si;循環(huán)體:實現(xiàn)數(shù)據(jù)傳送mov es:di,ax;每次傳送一個字add si,2;指向下一個(字)單元add di,2loop again;循環(huán)條件判定:循環(huán)次數(shù)減1,不為0轉移(循環(huán))6. 中斷指令和系統(tǒng)

33、功能調用 中斷(Interrupt)是又一種改變程序執(zhí)行順序的方法 8088CPU支持256個中斷,每個中斷用一個編號(中斷向量號)區(qū)別 中斷指令有:INT i8 IRET 本節(jié)主要掌握類似子程序調用指令的中斷調用指令INT i8,進而掌握系統(tǒng)功能調用(1). 中斷指令INT i8;中斷調用指令:產生i8號中斷;主程序使用,其中i8表示中斷向量號IRET;中斷返回指令:實現(xiàn)中斷返回;中斷服務程序使用(2). 系統(tǒng)功能調用方法 匯編程序提供給匯編語言程序員的功能非常有限 程序員需要利用ROM-BIOS和操作系統(tǒng)提供的資源 系統(tǒng)功能調用是程序設計的一個重要方面裸機裸機匯編語言程序3.4.6 處理器

34、控制類指令 處理器控制類指令用來控制CPU的狀態(tài),使CPU暫停、等待或空操作等NOP;空操作指令,等同于“xchg ax,ax”指令SEG: ;段超越前綴指令:CS:,SS:,DS:,ES:HLT;暫停指令:CPU進入暫停狀態(tài) 還有其他指令:LOCK ESC WAIT第3章:總結 本章展開了8088CPU16位指令系統(tǒng)的常用指令 希望大家就如下幾個方面進行一下總結:操作數(shù)尋址方式和目的地址尋址方式指令支持的操作數(shù)形式常用指令的助記符和功能指令對標志的影響 通過復習整理,形成指令系統(tǒng)的整體概念,進而掌握常用指令指令的執(zhí)行指令的執(zhí)行匯編語言的兩種語句格式執(zhí)行性語句執(zhí)行性語句用于表達處理器指令(也稱

35、為硬指令),匯編后對應一條指令代碼。由處理器指令組成的代碼序列是程序設計的主體標號: 硬指令助記符 操作數(shù),操作數(shù) ;注釋說明性語句說明性語句用于表達偽指令,指示源程序如何匯編、變量怎樣定義、過程怎么設置等名字 偽指令助記符 參數(shù),參數(shù), ;注釋MOV指令的功能立即數(shù)尋址方式寄存器尋址方式直接尋址方式間接尋址方式相對尋址方式基址變址尋址方式相對基址變址尋址方式XCHG指令的功能XLAT指令的功能堆棧的圖示SSSSSPSP0000H0000H(棧頂)(棧頂)存儲器存儲器高地址高地址堆棧段堆棧段PUSH指令的功能POP指令的功能SHL和SAL指令的功能SHR指令的功能SAR指令的功能ROL指令的功

36、能ROR指令的功能RCL指令的功能RCR指令的功能串傳送 MOVSB (正向 DF0 )串傳送 MOVSW (反向 DF1 )REP MOVSB (正向 DF0 )重復比較的解釋 指令repz cmpsb結束重復執(zhí)行的情況 ZF=0,即出現(xiàn)不相等的字符 CX=0,即比較完所有字符:這種情況下,如果ZF=0,說明最后一個字符不等;而ZF=1表示所有字符比較后都相等,也就是兩個字符串相同 所以,重復比較結束后,jnz unmat指令的條件成立ZF=0,表示字符串不相等主程序與子程序CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令指令后的指令處處返回地址返回地址目的地址

37、相對尋址方式目的地址寄存器段內間接尋址方式目的地址存儲器段內間接尋址方式目的地址段間直接尋址方式目的地址存儲器段間間接尋址方式條件轉移指令的含義JC/JB/JNAEJump on Carry/Below/Not Above or Equal C=1轉移JNC/JNB/JAEJump on Not Carry/Not Below/Above or Equal C=0轉移JZ/JEJump on Zero/Equal Z=1轉移JNZ/JNEJump on Not Zero/Equal Z=0轉移 JSJump on Sign S=1轉移JNSJump on Not Sign S=0轉移JP/JPEJump on Parity/Parity Even P=1轉移JNP/JPOJ

溫馨提示

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

評論

0/150

提交評論