



版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第3章 80 x86匯編語(yǔ)言程序設(shè)計(jì)(上)注:本章中,用此顏色和字型說(shuō)明的文字只適用于32位匯編2有效地址(effective address EA) 操作數(shù)在段內(nèi)的偏移地址尋址方式 產(chǎn)生有效地址的方法80 x86的操作數(shù)尋址方式有:1、立即尋址2、寄存器尋址3、存儲(chǔ)器尋址4、端口尋址3.1 80 x86的尋址方式3.1.1 操作數(shù)尋址80 x86指令的一般匯編語(yǔ)言格式:標(biāo)號(hào):指令助記符目的操作數(shù),源操作數(shù);注釋 其中 表示可選項(xiàng); 31、立即尋址 操作數(shù)以常量形式直接放在指令中,緊跟在操作碼之后 機(jī)器碼存放形式如下:立即尋址示例 MOV AH, -40 ; -40AH MOV AX, 34
2、D8H ; 34HAH, 0D8HAL MOV AX, -40 ; 0FFD8H(-40)AX MOV EAX, 12345678H ;12345678HEAX 我們首先討論兩種與存儲(chǔ)器無(wú)關(guān)的尋址方式:OPD8操作碼8位操作數(shù)低地址高地址OP操作碼D16高8位D16低8位16位操作數(shù)代碼段代碼段42、寄存器尋址 操作數(shù)存放在某個(gè)寄存器中,指令指定寄存器號(hào) 寄存器號(hào)操作數(shù)寄存器尋址示例 MOV AH, BL ;(BL)-AH MOV DS, AX ;(AX)-DS MOV SI, AX ;(AX)-SI MOV ECX, EDX ;(EDX)ECX說(shuō)明:立即尋址和寄存器尋址方式不需再次訪問(wèn)存儲(chǔ)器
3、即可得到操作數(shù),速度快指令寄存器5有效地址(EA)的4種組成成分: 位移量(displacement) 存放在指令中的8位、16位或32位的數(shù),是一個(gè)地址 有效地址的計(jì)算: EA=基址 +(變址*比例因子)+ 位移量 比例因子(scale factor) 其值可為1,2,4或8,386及其后繼機(jī)型新增加的 變址(index) 存放在變址寄存器中的內(nèi)容,用于訪問(wèn)數(shù)組的某個(gè)元素 基址(base) 存放在基址寄存器中的內(nèi)容,用于指向數(shù)組的首地址下面我們來(lái)討論余下的幾種與存儲(chǔ)器有關(guān)的尋址方式,先介紹幾個(gè)概念:616/32位尋址時(shí)有效地址四種成分的組成四種成分16位尋址32位尋址位移量0,8,16位0,
4、 8, 32位基址寄存器BX, BP任何32位通用寄存器(包括ESP)變址寄存器SI, DI除ESP以外的32位通用寄存器比例因子 無(wú)1, 2, 4, 87 默認(rèn)段選擇規(guī)則訪存類型所用段及寄存器缺省選擇規(guī)則指令代碼段 CS用于取指堆棧堆棧段 SS所有的堆棧的進(jìn)棧和出棧任何用BP,ESP,EBP作為基址寄存器的訪存目的串附加數(shù)據(jù)段 ES串處理指令的目的串局部數(shù)據(jù)數(shù)據(jù)段 DS除相對(duì)于堆棧以及串處理的目的串以外的所有數(shù)據(jù)訪問(wèn)8不允許使用段超越前綴的情況:(1)串操作指令的目的串必須用ES段(2)PUSH指令的目的和POP指令的源必須用SS段(3)程序的指令必須存放在CS段訪問(wèn)非默認(rèn)段數(shù)據(jù)的方法段超越
5、數(shù)據(jù)的存放比較靈活,除了放在默認(rèn)的DS段,還可以存放在別的段,此時(shí)訪問(wèn)他們需要使用段超越前綴,可用的段超越前綴有CS:, DS:, ES:, SS:, FS:, GS:。段超越舉例:MOV AX, 10H ;DS段10H處的一個(gè)字的數(shù)據(jù)賦給AX寄存器MOV AX, ES:10H; ES段10H處的一個(gè)字的數(shù)據(jù)賦給AX寄存器93、直接尋址 操作數(shù)地址的偏移量(EA)在指令中物理地址=指定段的段基地址16+偏移量(EA) 系統(tǒng)默認(rèn),操作數(shù)在數(shù)據(jù)段段基地址EA操作數(shù)+指令存儲(chǔ)器MOV AX, 2000H ; 立即尋址MOV AX, 2000H ; 直接尋址10直接尋址示例1 MOV AX, 1000
6、H 物理地址 設(shè)(DS)=10A0H 代碼段 + OP 00H 10H 數(shù)據(jù)段 11A00H 30H 50H 50H30HAX(本章中圖示存儲(chǔ)器地址從上到下遞增)低地址10A00H1000H11A00H10A0H1000H30H50H11A00H11直接尋址示例2MOV BL, ES:0100H 物理地址 設(shè)(ES)=3000H 30000H (DS)=2000H + 0100H 30100H 4B 00 BL4B在匯編語(yǔ)言指令中,可以用符號(hào)地址代替數(shù)值地址如:MOV AX, BUFF或 MOV AX, BUFF其中BUFF為存放數(shù)據(jù)單元的符號(hào)地址。3000H0100H30100H30100H
7、4B124、寄存器間接尋址 操作數(shù)在存儲(chǔ)器中,操作數(shù)地址的偏移量(EA)在寄存器中基址或變址寄存器號(hào)EA操作數(shù)+存儲(chǔ)器指令寄存器段基地址寄存器間接尋址示例 MOV AL, BX MOV AX, CS:SI MOV BP, AH MOV ECX, EDX 13MOV AH, BPMOV BX, SIMOV CX, SI設(shè) (SS)=1000H, (DS)=2000H , (BP)=0B10H, (SI)=032AH 物理地址 物理地址 10000H 20000H + 0B10H + 032AH 40H 00H 3EH 46H40H AH10B10H2032AH463EH BX2032BH10B1
8、1H SI032AH032AHCX1000H2000H0B10H032AH10B10H10B10H2032AH2032AH40H3EH46032AH145、基址尋址 操作數(shù)的有效地址是基址寄存器的內(nèi)容加上指令中指定的位移量 基址寄存器號(hào) 位移量地址+操作數(shù)指 令基址寄存器段基地址存儲(chǔ)器EA可用于數(shù)組元素的訪問(wèn)15基址尋址示例 MOV AX, 3000HBX (或BX+3000H) MOV AX, COUNTBX ; COUNT是符號(hào)地址 (或 MOV AX,COUNT+BX) 若(DS)=3000H, (BX)=2000H,COUNT=4000H 30000H 2000H + 4000H 12
9、34H36000H 34H 12HAX3000H2000H4000H36000H36000H34H12166、變址尋址 1)無(wú)比例因子的變址尋址(16位尋址)變址寄存器號(hào) 位移量地址+操作數(shù)指 令變址寄存器段基地址存儲(chǔ)器EA操作數(shù)的有效地址是變址寄存器的內(nèi)容加上指令中指定的位移量17變址尋址示例 MOV CX, 6020HSI (或SI+6020H) MOV DX, COUNTSI ; COUNT是符號(hào)地址 (或 MOV AX,COUNT+SI) 若(DS)=3000H, (SI)=2000H,COUNT=1000H 30000H 2000H + 1000H 6734H33000H 34H 6
10、7HDX3000H2000H1000H33000H33000H34H6718 2)有比例因子的變址尋址 操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以指令中指定的比例因子及位移量之和變址寄存器 比例因子位移量下標(biāo)*+操作數(shù)存儲(chǔ)器段基地址變址寄存器變址值指 令EA19有比例因子的變址尋址示例 MOV EAX, COUNTESI*4元素012000H元素1元素2元素3+1+2+3+4+12EAX存儲(chǔ)器EA=ESI*4COUNT設(shè)(ESI)=3,(DS)=1000HCOUNT=2000H20 7、基址變址尋址1)無(wú)位移量的基址變址尋址 操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和基址寄存器變址
11、寄存器變址值基址值+操作數(shù)指 令變址寄存器基址寄存器段基地址存儲(chǔ)器EA21無(wú)位移量基址變址尋址示例 MOV AX, BX+DI MOV AX, BXDI 若 (DS)=2100H, (BX)=0158H, (DI)=10A5H,物理地址 21000H 0158H+ 10A5H 221FDH 34H 12H1234HAX2100H0158H10A5H221FDH221FDH34H12222)基址變址相對(duì)尋址 操作數(shù)的有效地址是一個(gè)基址寄存器的內(nèi)容、一個(gè)變址寄存器的內(nèi)容及位移量之和 基址寄存器變址寄存器位移量變址值基址值+操作數(shù)指 令變址寄存器基址寄存器段基地址存儲(chǔ)器EA23基址變址相對(duì)尋址示例
12、MOV AX, MASKBX+SI;MASK是符號(hào)地址 若 (DS)=3000H, (BX)=2000H, (SI)=1000H, MASK=0250H 物理地址 30000H 2000H 1000H + 0250H 33250H 20H 43H 4320H AX3000H2000H1000H0250H33250H33250H20H43243)基址比例變址尋址 操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以指令中指定的比例因子加基址寄存器的內(nèi)容之和基址寄存器變址寄存器比例因子下標(biāo)基址值*+操作數(shù)指 令變址寄存器基址寄存器變址值段基地址存儲(chǔ)器 EA基址比例變址尋址示例 MOV ECX, EBX+ESI*
13、8254)相對(duì)基址比例變址尋址 操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以指令中指定的比例因子加基址寄存器的內(nèi)容、再加位移量之和基址寄存器變址寄存器比例因子位移量下標(biāo)基址值*+操作數(shù)指 令變址寄存器基址寄存器變址值段基地址存儲(chǔ)器EA相對(duì)基址比例變址尋址示例 MOV EAX, TABLEEBX+EDI*4268、端口尋址1)直接尋址(I/O Port Direct Addressing)直接尋址是使用一字節(jié)立即數(shù)尋址,因此I/O端口的尋址范圍為00HFFH,最多為256個(gè)。 IN AL, 20H ;從20H端口讀入1個(gè)字節(jié)OUT 60H, AX;將AX中1個(gè)字送到60H端口2)間接尋址(I/O Po
14、rt Indirect Addressing) 間接尋址由DX寄存器間接給出I/O端口地址,為兩個(gè)字節(jié),所以最多可尋址216=64K個(gè)端口地址。 MOVDX, 3FCHINAL, DX;從3FCH端口讀入1個(gè)字節(jié)273.1.2 轉(zhuǎn)移操作尋址直接尋址(段間)指令中直接提供了轉(zhuǎn)向段地址和偏移地址,用指令中提供的偏移地址取代IP寄存器,用指令中提供的段地址取代CS寄存器的內(nèi)容就完成從一個(gè)段到另一個(gè)段的轉(zhuǎn)移操作。 JMP FAR PTR NEXT_PRO28相對(duì)尋址(當(dāng)前段內(nèi))轉(zhuǎn)向的有效地址是當(dāng)前IP寄存器的內(nèi)容和指令中指定的位移量之和位移量只有8位的為短(short)轉(zhuǎn)移或條件轉(zhuǎn)移位移量有16位的為
15、近(near)轉(zhuǎn)移 偏移量機(jī)器碼程序00000405PROG_S: ADD AL,05H000290 NOP0003EBFB JMP SHORT PROG_S000590 NOP29間接尋址段內(nèi)間接尋址轉(zhuǎn)向有效地址是一個(gè)寄存器或是兩個(gè)字節(jié)存儲(chǔ)單元的內(nèi)容 。所得到的轉(zhuǎn)向的有效地址用來(lái)取代IP寄存器的內(nèi)容。 設(shè):(DS)=2000H,(BX)=1000H,變量TABLE的有效地址為1000H,(21000H)=0040H,(22000H)=5678H,則下列三條指令分別執(zhí)行后結(jié)果如下: JMP BX;執(zhí)行后IP=1000H JMP BX ;執(zhí)行后IP=0040H JMP TABLEBX ;執(zhí)行后I
16、P=5678H30間接尋址段間間接尋址用存儲(chǔ)器中的相繼的四個(gè)字節(jié)的內(nèi)容來(lái)取代IP和CS寄存器中的原始內(nèi)容以達(dá)到段間轉(zhuǎn)移的目的。 設(shè):(DS)=2500H,(SI)=1300H,(26300H)=4500H,(26302H)=32F0H, 則執(zhí)行以下指令后結(jié)果如下:JMP DWORD PTR SI;執(zhí)行后CS=32F0H,IP=4500H313.2 80 x86匯編語(yǔ)言格式匯編語(yǔ)言源程序結(jié)構(gòu)匯編語(yǔ)言上機(jī)過(guò)程匯編語(yǔ)言語(yǔ)句格式偽操作(偽指令) 數(shù)據(jù)段 說(shuō)明: 堆棧段 1、各段順序無(wú)關(guān) 2、除代碼段外,可缺省 3、可有若干個(gè)數(shù)據(jù)段, 若干代碼段 代碼段 END 標(biāo)號(hào) 附加段3.2.1 源程序結(jié)構(gòu)概覽3
17、2匯編語(yǔ)言程序例.DATA BUF1 DB 34H ;變量定義 BUF2 DB 2AH SUM DB ?.CODESTART: MOV AX, DATA MOV DS, AX ; 段寄存器賦值 MOV AL, BUF1 ADD AL, BUF2 MOV SUM, AL MOV AH, 4CH INT 21H ; 程序退出END START數(shù)據(jù)段代碼段333.2.2 匯編語(yǔ)言程序上機(jī)過(guò)程源程序 .asm匯編masm目標(biāo)程序 .obj連接linkdebug調(diào)試可執(zhí)行程序 .exeDOS下執(zhí)行執(zhí)行調(diào)試修改34更多細(xì)節(jié)以及在VC6中實(shí)現(xiàn)C+中嵌入?yún)R編請(qǐng)看匯編語(yǔ)言上機(jī)過(guò)程(自學(xué)).ppt有三類語(yǔ)句:指令
18、語(yǔ)句完成操作功能,能翻譯成機(jī)器指令偽指令語(yǔ)句為匯編程序在翻譯源程序時(shí)提供 有關(guān)信息 宏指令語(yǔ)句由若干條指令語(yǔ)句組成的語(yǔ)句偽指令語(yǔ)句格式: 符號(hào)名 偽操作 操作數(shù),操作數(shù), ;注釋3.2.3 匯編語(yǔ)言語(yǔ)句格式35指令語(yǔ)句格式符號(hào)名:指令助記符目的操作數(shù),源操作數(shù);注釋 一、指令語(yǔ)句格式1、符號(hào)名 由用戶按一定規(guī)則定義的標(biāo)識(shí)符,有標(biāo)號(hào)和變量?jī)煞N形式,在指令格式中用的是標(biāo)號(hào)??捎梅?hào)是: 字母:A-Z, a-z 數(shù)字符: 0-9 專用字符:?, _, , $ 長(zhǎng)度不超過(guò)31個(gè)字符, 首字符不能為數(shù)字,不能和保留字同名。2、指令助記符 指令助記符是匯編指令的符號(hào)代碼,不可缺省。 匯編源程序時(shí),系統(tǒng)使用
19、內(nèi)部對(duì)照表將每條指令的助記符譯成相應(yīng)的機(jī)器碼。363、目的操作數(shù) 1)參與指令操作 2)暫存操作結(jié)果 除立即尋址方式外,其他尋址方式均適用于目的操作數(shù). 4、源操作數(shù) 提供原始數(shù)據(jù)或操作對(duì)象,面向所有尋址方式5、注釋 注釋在系統(tǒng)匯編時(shí)并不產(chǎn)生機(jī)器碼 注釋可以放在指令語(yǔ)句尾,也可單獨(dú)使用 注釋前面的“;”不可缺少 37指令舉例: START: MOV AX, 2000H MOV DS, AX ;為DS寄存器賦值二、常量常量有兩種:1、數(shù)值常量 二進(jìn)制數(shù) 以B結(jié)尾,如01011101B 八進(jìn)制數(shù) 以Q結(jié)尾,如235Q 十進(jìn)制數(shù) 以D結(jié)尾或沒(méi)有結(jié)尾字母,如98D或98 十六進(jìn)制數(shù) 以H結(jié)尾,如5BH
20、,當(dāng)最高位為AF,則在最高位前加02、字符串常量 用單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符,如A、AB 字符用ASCII碼形式存儲(chǔ)常量的應(yīng)用:(1)在指令語(yǔ)句中作立即數(shù) MOV CX, 100 (2)在指令語(yǔ)句中作位移量 MOV AX, 34SI(3)在數(shù)據(jù)定義語(yǔ)句中作初值 X DB 12H, 34H,abcd38三、變量和標(biāo)號(hào)變量用來(lái)代表數(shù)據(jù)所在存儲(chǔ)單元的地址,在數(shù)據(jù)段、附加段和堆棧段中使用,變量與其所代表的數(shù)據(jù)用空格隔開(kāi)。變量有三種屬性:1、段屬性變量所在段的起始地址2、偏移屬性從段起始地址到定義變量的位置之間的字節(jié)數(shù)3、類型屬性該變量所保留的字節(jié)數(shù) DB 1個(gè)字節(jié) DW 2 個(gè)字節(jié) DD 4個(gè)字節(jié)
21、 DQ 8個(gè)字節(jié) DT 10個(gè)字節(jié)39標(biāo)號(hào)用來(lái)代表一條指令所在存儲(chǔ)單元的地址,在代碼段中使用。標(biāo)號(hào)與其代表的指令間用冒號(hào)隔開(kāi)。標(biāo)號(hào)也有三種屬性:1、段屬性定義標(biāo)號(hào)所在段的起始地址2、偏移屬性從段起始地址到定義標(biāo)號(hào)的位置之間的字節(jié)數(shù)3、類型屬性表示它的轉(zhuǎn)移特性 NEAR (近) 段內(nèi)轉(zhuǎn)移 FAR (遠(yuǎn)) 段間轉(zhuǎn)移40 處理器選擇偽指令 數(shù)據(jù)定義和存儲(chǔ)器分配偽指令 表達(dá)式賦值偽指令 地址計(jì)數(shù)器與對(duì)準(zhǔn)偽指令3.2.4 匯編偽指令41偽指令:幫助匯編程序正確翻譯源程序的命令,本身不生成任何機(jī)器指令)(一)處理器選擇偽指令.8086 可使用8086指令(一般不用寫(xiě)).286 可使用80286指令.286
22、P 可使用保護(hù)方式下的80286指令.386 可使用80386指令.386P 可使用保護(hù)方式下的80386指令.486 可使用80486指令.486P 可使用保護(hù)方式下的80486指令.586 可使用Pentium指令.586P 可使用保護(hù)方式下Pentium的指令.686 可使用Pentium Pro指令.686P 可使用保護(hù)方式下Pentium Pro的指令.MMX 可使用MMX指令.XMM 可使用SSE指令當(dāng)源程序使用了286及以上的機(jī)型新增加的指令時(shí),應(yīng)該在程序開(kāi)始使用相應(yīng)的處理器選擇偽指令。42(二)數(shù)據(jù)定義偽指令格式:變量名 定義符 操作數(shù)項(xiàng)表操作:為變量分配存儲(chǔ)單元并將初值置入相
23、應(yīng)單元中操作數(shù)項(xiàng)可為: 1、常數(shù)或表達(dá)式 2、字符串 3、?表達(dá)式 4、帶DUP 的表達(dá)式定義符可為: DB 定義字節(jié) DW 定義字(2個(gè)字節(jié)) DD定義雙字(4個(gè)字節(jié)) DF定義六字節(jié) DQ定義八字節(jié) DT定義十字節(jié)操作數(shù)項(xiàng)表:操作數(shù)項(xiàng), 操作數(shù)項(xiàng), 操作數(shù)項(xiàng)43操作數(shù)是常數(shù)或表達(dá)式 X1 DB 40H ;為X1分配1個(gè)字節(jié),初值40H X2 DW 250*250 ;為X2分配2個(gè)字節(jié),初值62500 X3 DD 10203040H ;為X3分配4個(gè)字節(jié),初值為10203040H X4 DQ (120+50)/10 ;為X4分配8個(gè)字節(jié),初值17 X5 DB 10, 20, 30 ;多項(xiàng)定義
24、,X5被分配3個(gè)字節(jié),初值分別為10,20,30,地址從低到高,各個(gè)值間用逗號(hào)分開(kāi)44操作數(shù)為字符串 STRING1 DB HELLO STRING2 DB H, E, L, L, O 字符串用DB定義,被定義串以單引號(hào)括起來(lái) 串中可包含數(shù)字符、大小寫(xiě)英文字母、回車符、 換行符、 空格、?、$、下劃線_等 字符串以ASCII碼形式存儲(chǔ)在存儲(chǔ)單元中。 STRING1 H +1 E +2 L +3 L +4 O45區(qū)分 S1 DB AB 與 S2 DW AB 它們的存儲(chǔ)情況為: S1 S2 A B B A操作數(shù)項(xiàng)為? ?用于預(yù)留空間,不置初值 Y1 DB 20H, ? ;定義2個(gè)字節(jié),其中預(yù)留1個(gè)
25、字節(jié) Y2 DW ?, ? ;預(yù)留2個(gè)字 Y3 DD ? ;預(yù)留4個(gè)字節(jié) Y4 DQ ? ;預(yù)留8個(gè)字節(jié) Y5 DT ? ;預(yù)留10個(gè)字節(jié)46操作數(shù)項(xiàng)帶重復(fù)定義符DUP 格式: N DUP(操作數(shù)項(xiàng)表) 操作:將操作數(shù)項(xiàng)表內(nèi)容重復(fù)定義N次 VAR1 DW 2 DUP(2, 4), 1476H VAR2 DB 2 DUP(?, 2 DUP(A, B) ) 存儲(chǔ)情況為: VAR1 02H VAR2 ? 00H A 04H B 00H A 02H B 00H ? 04H A 00H B 76H A 14H B4748操作數(shù)運(yùn)算符算術(shù)運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符數(shù)值回送運(yùn)算符屬性運(yùn)算符運(yùn)算符優(yōu)先級(jí)48
26、算術(shù)運(yùn)算符(單目+, 單目-, +, -, *, /, MOD) 運(yùn)算符 格 式 運(yùn) 算 + +表達(dá)式 取表達(dá)式正值 - -表達(dá)式 取表達(dá)式負(fù)值 + 表達(dá)式1+表達(dá)式2 求表達(dá)式1、表達(dá)式2之和 - 表達(dá)式1-表達(dá)式2 求表達(dá)式1、表達(dá)式2之差 * 表達(dá)式1*表達(dá)式2 表達(dá)式1、表達(dá)式2之積 / 表達(dá)式1/表達(dá)式2 表達(dá)式1、表達(dá)式2之商 MOD 表達(dá)式1 MOD 表達(dá)式2 取余數(shù) 說(shuō)明:1、算術(shù)運(yùn)算符可用于數(shù)值表達(dá)式或地址表達(dá)式2、用于地址表達(dá)式時(shí),只有其結(jié)果有物理意義時(shí)才有效 常用的是:地址+數(shù)字常量 (結(jié)果是地址) 地址-數(shù)字常量 (結(jié)果是地址) 地址-地址 (結(jié)果是常量)算術(shù)運(yùn)算符示例
27、(1) MOV AL, 20+30 ;50-AL MOV BH, 100-2 ;98-BH MOV CX, 50/2 ;25-CX MOV AL, 80 MOD 15 ;5-AL(3) 設(shè)數(shù)據(jù)定義如下: ARRAYA DW 1, 2, 3, 4, 5, 6, 7 WENDA DW ? 將數(shù)組長(zhǎng)度(字?jǐn)?shù))存入CX: MOV CX, (WENDA-ARRAYA)/2 ; 地址-地址,結(jié)果為一常量(2) 將首地址為BLOCK的字?jǐn)?shù)組的第6個(gè)字傳送到DX: MOV DX, BLOCK+(6-1)*2 ; 地址+常量,結(jié)果仍為一地址值50 邏輯運(yùn)算符(NOT,AND,OR,XOR) 運(yùn)算符 格 式 運(yùn)
28、算 NOT NOT 表達(dá)式 按位取反 AND 表達(dá)式1 AND 表達(dá)式2 按位“與”運(yùn)算 OR 表達(dá)式1 OR 表達(dá)式2 按位“或”運(yùn)算 XOR 表達(dá)式1 XOR 表達(dá)式2 按位“異或”運(yùn)算 邏輯運(yùn)算符和邏輯運(yùn)算指令的區(qū)別: 邏輯運(yùn)算指令 邏輯運(yùn)算符出現(xiàn)在語(yǔ)句的位置 指令助記符 操作數(shù)字段操作對(duì)象 可以是寄存器或 只能是整型常數(shù) 存儲(chǔ)器操作數(shù)何時(shí)計(jì)算 程序運(yùn)行時(shí) 源程序匯編時(shí)51關(guān)系運(yùn)算符(EQ,NE,LT,LE,GT,GE) 運(yùn)算符 格 式 運(yùn) 算 EQ 表達(dá)式1 EQ 表達(dá)式2 表達(dá)式1=表達(dá)式2為真 NE 表達(dá)式1 NE 表達(dá)式2 表達(dá)式1表達(dá)式2為真 LT 表達(dá)式1 LT 表達(dá)式2 表
29、達(dá)式1表達(dá)式2為真 LE 表達(dá)式1 LE 表達(dá)式2 表達(dá)式1表達(dá)式2為真 GE 表達(dá)式1 GE 表達(dá)式2 表達(dá)式1=表達(dá)式2為真 關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須都是常量或同一段內(nèi)的符號(hào)地址,比較結(jié)果為邏輯值:如果關(guān)系成立,則返回0FFFFH(真);否則,返回0(假)。52邏輯運(yùn)算符示例 MOV AH, NOT 0F0H ;0FHAH MOV BL, 40H OR 0B4H ;0F4HBL MOV BL, 55H XOR 48H ;1DHBL MOV CH, 50H AND 30H ;10HCH 關(guān)系運(yùn)算符示例 N1 EQU 10 N2 EQU 20 . MOV BX, N1 EQ N2 ; 0 B
30、X MOV CX, N1 NE N2 ;0FFFFH CX MOV AX, N1 LT N2 ;0FFFFH AX MOV DI, N1 GE N2 ;0-DI53數(shù)值回送運(yùn)算符 (SEG,OFFSET,TYPE,LENGTH,SIZE) 數(shù)值回送運(yùn)算符對(duì)變量或標(biāo)號(hào)進(jìn)行分析,回送其地址屬性值或變量特征值。(1)地址回送運(yùn)算符 符號(hào) 作用對(duì)象 操 作 SEG 變量或標(biāo)號(hào) 返回其所在段的段基址值OFFSET 變量或標(biāo)號(hào) 返回其在段內(nèi)的偏移量 54(2)符號(hào)特征回送運(yùn)算符 符號(hào) 作用對(duì)象 操 作 TYPE 變量或標(biāo)號(hào) 用數(shù)字表示其類型屬性 LENGTH 變量 用DUP重復(fù)定義符定義的變量 ,返回分配
31、的元素個(gè)數(shù);其他 形式,則返回1 SIZE 變量 回送LENGTH*TYPE之積 55TYPE 運(yùn)算符 類型屬性 運(yùn)算結(jié)果變量 DB 1 DW 2 DD 4 DQ 8 DT 10標(biāo)號(hào) NEAR -1 FAR -256數(shù)值回送運(yùn)算符示例 .DATA NUM1 DB 10 DUP(10) ;數(shù)據(jù)定義 NUM2 DB 10H, 20H, 50H NUM3 DW 20 DUP(0, 4 DUP(2) NUM4 DB STRING .CODE MOV CL, SIZE NUM4 ;1*1-CL MOV CH, SIZE NUM3 ;20*2-CHMOV AH, TYPE NUM3 ; 2-AHMOV B
32、H, LENGTH NUM3 ;20-BH(最外層)MOV SI, OFFSET NUM1 ;NUM1的偏移量-SIMOV DI, OFFSET NUM2 ;NUM2的偏移量-DIMOV AX, SEG NUM1MOV BX, SEG NUM2 ;NUM2與NUM1段基址值相同57 屬性運(yùn)算符 (PTR, SHORT)SHORT格式: JMP SHORT 標(biāo)號(hào) 操作: 轉(zhuǎn)移的距離屬性為短,即轉(zhuǎn)移范圍為-128+127字節(jié) PTR格式: 類型 PTR 表達(dá)式 操作: 對(duì)存儲(chǔ)器尋址的表達(dá)式,類型可為BYTE,WORD,DWORD, QWORD和TBYTE; 表達(dá)式為標(biāo)號(hào)時(shí),類型可為NEAR或FAR
33、。 該運(yùn)算符顯式指定表達(dá)式的類型58PTR 運(yùn)算符示例(1)DATA1DB 10H, 20H, 30H DATA2DW 4023H, 1A00H ;數(shù)據(jù)定義 . MOV AX, WORD PTR DATA1 ;(AX)-2010H MOV BL, BYTE PTR DATA2 ;(BL)DS74簡(jiǎn)化段定義結(jié)構(gòu) .MODEL SMALL .STACK 100H .DATA .CODE ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV AH, 4CH INT 21HEND START7576 3.3 系統(tǒng)功能調(diào)用與人
34、機(jī)界面設(shè)計(jì)1)中斷指令 中斷指令(INT與IRET) 屬于控制轉(zhuǎn)移類指令,可以執(zhí)行軟件中斷和DOS系統(tǒng)功能調(diào)用77 指令 格式 操 作 中斷 INT N SP-(SP)-2 (SP)+1,(SP)-(FLAGS) SP-(SP)-2 (SP)+1,(SP)-(CS) SP-(SP)-2 (SP)+1,(SP)-(IP) IP-(0000:OA) ;OA=4*N CS-(0000:OA+2)中斷返回 IRET IP-(SP)+1,(SP) SP-(SP)+2 CS-(SP)+1,(SP) SP-(SP)+2 FLAGS-(SP)+1,(SP) SP-(SP)+278常用的軟件中斷中斷號(hào)功 能中斷號(hào)功 能10H視頻服務(wù)中斷13H軟硬盤控制中斷14H串行口中斷15H各種IO設(shè)備中斷16H鍵盤中斷17H并行打印口中斷20H返回DOS21HDOS系統(tǒng)功能調(diào)用23HCtrl+Break處理
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)用工廚師合同范本
- 東京美甲店轉(zhuǎn)租合同范本
- 分期售房合同范本
- 出售轉(zhuǎn)讓地板合同范本
- 包裝袋購(gòu)銷合同范本版
- 中介買賣房屋合同范本
- 個(gè)人入股投資合同范本
- 包裝承攬合同范本
- 勞務(wù)派遣三方協(xié)議合同范本
- 勞務(wù)合同范本罰款
- 最新小學(xué)二年級(jí)口算及豎式計(jì)算練習(xí)題
- 腦病科中醫(yī)疾病護(hù)理常規(guī)(精)
- 生產(chǎn)與運(yùn)作管理-陳榮秋
- 病理生理學(xué)教學(xué)病生6休克課件
- 金雞冠的公雞繪本課件
- 日影朝向及長(zhǎng)短
- 輸尿管結(jié)石教學(xué)查房PPT課件(PPT 42頁(yè))
- 沙盤游戲治療(課堂PPT)
- (完整版)學(xué)生的自我評(píng)價(jià)的表格
- 樸素貝葉斯分類器完整
- 教育系統(tǒng)績(jī)效工資分配方案(共6頁(yè))
評(píng)論
0/150
提交評(píng)論