版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、3.1 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)n以助記符形式表示計(jì)算機(jī)指令以助記符形式表示計(jì)算機(jī)指令n助記符(助記符(mnemonic)是便于人們記憶、并能描述指令)是便于人們記憶、并能描述指令功能和指令操作數(shù)的符號(hào)功能和指令操作數(shù)的符號(hào)n助記符是表明指令功能的英語單詞或其縮寫助記符是表明指令功能的英語單詞或其縮寫n匯編格式指令以及使用它們編寫程序的規(guī)則匯編格式指令以及使用它們編寫程序的規(guī)則就形成匯編語言(就形成匯編語言(Assembly Language)n匯編語言程序:用匯編語言書寫的程序匯編語言程序:用匯編語言書寫的程序n匯編程序:將匯編語言程序匯編程序:將匯編語言程序“匯編匯編”成機(jī)
2、器代成機(jī)器代碼目標(biāo)模塊的程序碼目標(biāo)模塊的程序3.1.1 匯編語言特點(diǎn)匯編語言特點(diǎn)n匯編語言的優(yōu)點(diǎn):匯編語言的優(yōu)點(diǎn):n直接控制計(jì)算機(jī)硬件部件直接控制計(jì)算機(jī)硬件部件n編寫編寫“時(shí)間時(shí)間”和和“空間空間”兩方面最有效程序兩方面最有效程序n匯編語言的缺點(diǎn):匯編語言的缺點(diǎn):n與處理器密切有關(guān)與處理器密切有關(guān)n需要熟悉計(jì)算機(jī)硬件系統(tǒng)、考慮許多細(xì)節(jié)需要熟悉計(jì)算機(jī)硬件系統(tǒng)、考慮許多細(xì)節(jié)n編寫繁瑣,調(diào)試、維護(hù)、交流和移植困難編寫繁瑣,調(diào)試、維護(hù)、交流和移植困難3.1.2 8086指令系統(tǒng)概述指令系統(tǒng)概述nIntel 8086Intel 8086指令系統(tǒng)共有指令系統(tǒng)共有117117條基本指令條基本指令n可分成可分
3、成6 6個(gè)功能組個(gè)功能組n數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令n算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令n位操作類指令位操作類指令n串操作類指令串操作類指令n控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令n處理機(jī)控制類指令處理機(jī)控制類指令n由由4 4部分組成:部分組成:標(biāo)號(hào)標(biāo)號(hào): :-標(biāo)號(hào)表示該指令在主存中的邏輯地址標(biāo)號(hào)表示該指令在主存中的邏輯地址指令助記符指令助記符-代表一種指令代表一種指令目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)-表示參與操作的對(duì)象表示參與操作的對(duì)象; ;注釋注釋-對(duì)該指令或程序段功能的說明對(duì)該指令或程序段功能的說明3.1.2 8086指令系統(tǒng)概述指令系統(tǒng)概述1.數(shù)據(jù)傳送類指令n數(shù)據(jù)傳送指令是將源操作數(shù)傳送到目
4、標(biāo)操作數(shù)據(jù)傳送指令是將源操作數(shù)傳送到目標(biāo)操作數(shù),即將數(shù)據(jù)、地址或立即數(shù)從一個(gè)位置傳數(shù),即將數(shù)據(jù)、地址或立即數(shù)從一個(gè)位置傳送到存儲(chǔ)單元中。數(shù)據(jù)傳送指令是最常使用送到存儲(chǔ)單元中。數(shù)據(jù)傳送指令是最常使用的一類指令的一類指令n除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位n指令包括:指令包括:MOV,PUSH,POP,XCHG,LEA,LDS/LES,XLAT,IN,OUT(1)傳送指令MOVnMOV reg/mem,immMOV reg/mem,immn立即數(shù)送寄存器或主存立即數(shù)送寄存器或主存nMOV reg/mem/seg,regMOV reg/mem/seg,reg
5、n寄存器送(段)寄存器或主存寄存器送(段)寄存器或主存nMOV reg/seg,memMOV reg/seg,memn主存送(段)寄存器主存送(段)寄存器nMOV reg/mem,segMOV reg/mem,segn段寄存器送寄存器或主存段寄存器送寄存器或主存 舉例舉例演示演示立即數(shù)立即數(shù)段寄存器段寄存器CS DS ES SSCS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存儲(chǔ)儲(chǔ)器器MOV 舉例n例:例:MOV數(shù)據(jù)傳送數(shù)據(jù)傳送nMOV AL, 20HnMOV AH, ALnMOV SI, 200HnMOV A
6、X, BXnMOV DI, AXnMOV AX, DSnMOV ES, AXnMOV BYTE PTR SI,0AHnMov WORD PTR SI+2,0BH(2)堆棧指令堆棧指令PUSH POPn堆棧:后進(jìn)先出堆棧:后進(jìn)先出FILOFILO,位于堆棧,位于堆棧段;段;SSSS段寄存器段寄存器記錄其段地址記錄其段地址n堆棧只有一個(gè)出堆棧只有一個(gè)出口,即當(dāng)前棧頂口,即當(dāng)前棧頂;用堆棧指針寄;用堆棧指針寄存器存器SPSP指定指定演示演示nPUSHn格式:格式:PUSH srcn操作:操作:SPSP2,SS:SPsrc,將堆棧指,將堆棧指針針SP減減2,再將,再將src壓入堆棧頂部,壓入堆棧頂部,
7、src為為16位操位操作數(shù)作數(shù)n例:例: nPUSH AX ;將將AX內(nèi)容壓入堆棧內(nèi)容壓入堆棧 ;(SP)1AH,高地址存入高字節(jié)高地址存入高字節(jié) ; (SP)2AL,低地址存入低字節(jié)低地址存入低字節(jié) ; (SP)(SP)2,SP指向新棧頂指向新棧頂PUSH壓入堆棧指令演示演示nPOPn格式:格式:POP destn操作:操作:destSS:SP,SPSP 2,將棧頂,將棧頂?shù)囊粋€(gè)字彈出傳送到的一個(gè)字彈出傳送到dest,再將,再將SP加加2,將,將SP指指向新的棧頂,向新的棧頂,dest 的尋址方式是除立即尋址之的尋址方式是除立即尋址之外的所有存儲(chǔ)器尋址方式和寄存器尋址方式。外的所有存儲(chǔ)器尋址
8、方式和寄存器尋址方式。n例:例: nPOP BX ;將棧頂內(nèi)容彈出到將棧頂內(nèi)容彈出到BX ;(BL)(SP),低地址彈出到低字節(jié)),低地址彈出到低字節(jié) ;(BH)(SP) 1,高地址彈出到高字節(jié),高地址彈出到高字節(jié) ;(SP)(SP) 2,SP指向新棧頂指向新棧頂POP彈出堆棧指令演示演示(3)交換指令XCHGn把兩個(gè)地方的數(shù)據(jù)進(jìn)行互換把兩個(gè)地方的數(shù)據(jù)進(jìn)行互換nXCHG reg,reg/mem XCHG reg,reg/mem ;reg reg reg/memreg/memn寄存器與寄存器之間對(duì)換數(shù)據(jù)寄存器與寄存器之間對(duì)換數(shù)據(jù)n寄存器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)寄存器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)n不能在存儲(chǔ)器
9、與存儲(chǔ)器之間對(duì)換數(shù)據(jù)不能在存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)舉例舉例演示演示(3)交換指令XCHG 舉例n例:例:nMOV AX, 1234H nXCHG AH, AL ;AX高低字節(jié)交換,高低字節(jié)交換, ;結(jié)果:結(jié)果:AX = 3412HnMOV BX, 0ABCDH nXCHG AX, BX ;AX與與BX交換內(nèi)容,交換內(nèi)容, ;結(jié)果:結(jié)果:AX = 0ABCDH ;BX = 3412HnXCHG 2000H, CL 將將DS:2000H內(nèi)容與內(nèi)容與 ;CL計(jì)數(shù)器低字節(jié)進(jìn)行字節(jié)交換計(jì)數(shù)器低字節(jié)進(jìn)行字節(jié)交換(4)有效地址傳送指令LEAn將存儲(chǔ)器操作數(shù)的有效地址傳送至指定的將存儲(chǔ)器操作數(shù)的有效地址傳送
10、至指定的16位寄存器中位寄存器中nLEA r16,mem LEA r16,mem ;r16memr16mem的有效地址的有效地址EAEA舉例舉例(4)有效地址傳送指令LEA 舉例n例:例:n設(shè):(設(shè):(SI)=2000HnLEABX,SI3412H n執(zhí)行指令結(jié)果將偏移地址執(zhí)行指令結(jié)果將偏移地址3010H傳送到傳送到BX,n即(即(BX)=5412H(5) LDS/LES指針傳送指令LDS r16,memLDS r16,mem;r16memr16mem,;DSmem+2DSmem+2nLDSLDS指令將主存中指令將主存中memmem指定的字送至指定的字送至r16r16,并將,并將memmem的
11、下的下一字送一字送DSDS寄存器寄存器LES r16,memLES r16,mem;r16memr16mem,;ESmem+2ESmem+2nLESLES指令將主存中指令將主存中memmem指定的字送至指定的字送至r16r16,并將,并將memmem的下的下一字送一字送ESES寄存器寄存器(6)XLAT換碼指令換碼指令n將將BX指定的緩沖區(qū)中、指定的緩沖區(qū)中、AL指定的位移處的一指定的位移處的一個(gè)字節(jié)數(shù)據(jù)取出賦給個(gè)字節(jié)數(shù)據(jù)取出賦給ALnXLATXLAT ;ALDS:BX+ALALDS:BX+ALn換碼指令執(zhí)行前:換碼指令執(zhí)行前:n主存建立一個(gè)字節(jié)量表格,含要轉(zhuǎn)換成的目的代碼主存建立一個(gè)字節(jié)量表
12、格,含要轉(zhuǎn)換成的目的代碼n表格首地址存放于表格首地址存放于BXBX,ALAL存放相對(duì)表格首的位移量存放相對(duì)表格首的位移量n換碼指令執(zhí)行后:換碼指令執(zhí)行后:n將將ALAL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼演示演示2.輸入輸出指令n8086通過輸入輸出指令與外設(shè)進(jìn)行數(shù)據(jù)交通過輸入輸出指令與外設(shè)進(jìn)行數(shù)據(jù)交換;呈現(xiàn)給程序員的外設(shè)是端口(換;呈現(xiàn)給程序員的外設(shè)是端口(Port)即即I/O地址地址n8086用于尋址外設(shè)端口的地址線為用于尋址外設(shè)端口的地址線為16條,條,端口最多為端口最多為21665536(64K)個(gè),端口)個(gè),端口號(hào)為號(hào)為0000HFFFFHn每個(gè)端口用于傳送一個(gè)字節(jié)的
13、外設(shè)數(shù)據(jù)每個(gè)端口用于傳送一個(gè)字節(jié)的外設(shè)數(shù)據(jù)(1)IN輸入指令n將外設(shè)數(shù)據(jù)傳送給將外設(shè)數(shù)據(jù)傳送給CPU內(nèi)的內(nèi)的AL/AXnIN AL,i8IN AL,i8;字節(jié)輸入:;字節(jié)輸入:ALI/OALI/O端口(端口(i8i8直接尋址)直接尋址)nIN AL,DXIN AL,DX;字節(jié)輸入:;字節(jié)輸入:ALI/OALI/O端口(端口(DXDX間接尋址)間接尋址)nIN AX,i8IN AX,i8;字輸入:;字輸入:AXI/OAXI/O端口(端口(i8i8直接尋址)直接尋址)nIN AX,DXIN AX,DX;字輸入:;字輸入:AXI/OAXI/O端口(端口(DXDX間接尋址)間接尋址)舉例舉例n例:例:
14、nIN AL, 80H n ;(AL)(80H端口端口),從,從80H端口讀入字節(jié)信端口讀入字節(jié)信息存放在息存放在AL寄存器寄存器nIN AX, DX n ;(AL)(DX),從,從DX中裝載的端口讀入字中裝載的端口讀入字信息存放在信息存放在AX寄存器寄存器(1)IN輸入指令 舉例(2)OUT輸入指令n將將CPU內(nèi)的內(nèi)的AL/AX數(shù)據(jù)傳送給外設(shè)數(shù)據(jù)傳送給外設(shè)nOUT i8,ALOUT i8,ALn;字節(jié)輸出:;字節(jié)輸出:I/OI/O端口端口ALAL(i8i8直接尋址)直接尋址)nOUT DX,ALOUT DX,ALn;字節(jié)輸出:;字節(jié)輸出:I/OI/O端口端口ALAL(DXDX間接尋址)間接尋
15、址)nOUT i8,AXOUT i8,AXn;字輸出:;字輸出:I/OI/O端口端口AXAX(i8i8直接尋址)直接尋址)nOUT DX,AXOUT DX,AXn;字輸出:;字輸出:I/OI/O端口端口AXAX(DXDX間接尋址)間接尋址)舉例舉例(2)OUT輸入指令 舉例n例:例:以下指令實(shí)現(xiàn)將外部設(shè)備端口以下指令實(shí)現(xiàn)將外部設(shè)備端口80H的字的字節(jié)信息傳送到存儲(chǔ)單元節(jié)信息傳送到存儲(chǔ)單元DDATA;從外設(shè)端口;從外設(shè)端口0A2FH端口讀入一字信息,再將讀入的信息端口讀入一字信息,再將讀入的信息輸出到端口輸出到端口0AA5H的外設(shè)上。的外設(shè)上。nDDATA DW ?nIN AX, 80HnMOV
16、 DDATA, AXnMOV DX, 0A2FHnIN AX, DXnMOV DX, 0AA5HnOUT DX, AX3.算術(shù)運(yùn)算指令n四則運(yùn)算是計(jì)算機(jī)經(jīng)常進(jìn)行的一種操作。算四則運(yùn)算是計(jì)算機(jī)經(jīng)常進(jìn)行的一種操作。算術(shù)運(yùn)算指令實(shí)現(xiàn)二進(jìn)制(和十進(jìn)制)數(shù)據(jù)的術(shù)運(yùn)算指令實(shí)現(xiàn)二進(jìn)制(和十進(jìn)制)數(shù)據(jù)的四則運(yùn)算四則運(yùn)算n請(qǐng)注意算術(shù)運(yùn)算類指令請(qǐng)注意算術(shù)運(yùn)算類指令對(duì)標(biāo)志的影響對(duì)標(biāo)志的影響n指令包括:指令包括:ADD、ADC、INC、DAA、AAA、SUB、SBB、DEC、CMP、NEG、AAS/DAS、MUL、IMUL、DIV、IDIV、CBW、CWD、(1) ADD加法指令nADD指令將源與目的操作數(shù)相加,結(jié)果
17、指令將源與目的操作數(shù)相加,結(jié)果送到目的操作數(shù)送到目的操作數(shù)nADD指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置nADD reg,imm/reg/memADD reg,imm/reg/memn;regregregregimm/reg/memimm/reg/memnADD mem,imm/regADD mem,imm/regn;memmemmemmemimm/regimm/reg舉例舉例(1) ADD加法指令 舉例n例:例:nADD AL, 12H n;AL中內(nèi)容和中內(nèi)容和12H相加,結(jié)果放在相加,結(jié)果放在AL中中nADD SI, BX20H n;SI中內(nèi)容和中內(nèi)容和BX20H;BX2
18、1H所指兩存儲(chǔ)單元內(nèi)容相加,結(jié)果在所指兩存儲(chǔ)單元內(nèi)容相加,結(jié)果在SI中中nADD SI, CX n;SI和和CX內(nèi)容相加,結(jié)果在內(nèi)容相加,結(jié)果在SI中中nADD BXSI, AX n;BXSI和和BXSI1兩單元內(nèi)容與兩單元內(nèi)容與AX中內(nèi)容相加中內(nèi)容相加n;結(jié)果在結(jié)果在BXSI,BXSI1所指單元中所指單元中(2) ADC帶進(jìn)位的加法nADC指令將源與目的操作數(shù)相加,再加上進(jìn)位指令將源與目的操作數(shù)相加,再加上進(jìn)位CF標(biāo)志,結(jié)果送到目的操作數(shù)標(biāo)志,結(jié)果送到目的操作數(shù)nADC指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置nADC指令主要與指令主要與ADD配合,實(shí)現(xiàn)多精度加法運(yùn)配合,實(shí)現(xiàn)多
19、精度加法運(yùn)算算nADC reg,imm/reg/memADC reg,imm/reg/memn;regregregregimm/reg/memimm/reg/memCFCFnADC mem,imm/regADC mem,imm/regn;memmemmemmemimm/regimm/regCFCF舉例舉例(2) ADC帶進(jìn)位的加法 舉例n例:例:nADC AL, 34H ;AL(AL)34H(CF)nADC AX, CX n ;AX(AX)(CX)(CF)nADC BX,DI ;BX(BX)DI1DI(CF)(3) INC加1指令 nINC指令對(duì)操作數(shù)加指令對(duì)操作數(shù)加1(增量)(增量)nINC
20、指令不影響進(jìn)位指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志他狀態(tài)標(biāo)志nINC reg/memINC reg/memn;reg/memreg/memreg/memreg/mem1 1n例:例:nINC BXINC BXnINC BYTE PTR BXINC BYTE PTR BX(4) SUB 不考慮借位的減法指令nSUB指令將目的操作數(shù)減去源操作數(shù),結(jié)果指令將目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)送到目的操作數(shù)nSUB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志nSUB reg,imm/reg/memSUB reg,imm/reg/memn;regregre
21、gregimm/reg/memimm/reg/memnSUB mem,imm/regSUB mem,imm/regn;memmemmemmemimm/regimm/reg舉例舉例(4) SUB 不考慮借位的減法指令 舉例n例:例:nSUB AH, 0F0H n;AH (AH) 0F0HnSUB BX20H, DX n;BX20H (BX20H) (DX)nSUB AX, CX(5) SBB 考慮借位的減法指令nSBB指令將目的操作數(shù)減去源操作數(shù),再減去借指令將目的操作數(shù)減去源操作數(shù),再減去借位位CF(進(jìn)位),結(jié)果送到目的操作數(shù)。(進(jìn)位),結(jié)果送到目的操作數(shù)。nSBB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志
22、指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志nSBB指令主要與指令主要與SUB配合,實(shí)現(xiàn)多精度減法運(yùn)算配合,實(shí)現(xiàn)多精度減法運(yùn)算nSBB reg,imm/reg/memSBB reg,imm/reg/memn;regregregregimm/reg/memimm/reg/memCFCFnSBB mem,imm/regSBB mem,imm/regn;memmemmemmemimm/regimm/regCFCF舉例舉例(5) SBB 考慮借位的減法指令 舉例n例:例:nMOV AX, 5678HnMOV DX, 1234HnSUB AX, 6789H;CF = 1nSBB DX, 1122H;DX = 0111H
23、(6) DEC 減1指令nDEC指令對(duì)操作數(shù)減指令對(duì)操作數(shù)減1(減量)(減量)nDEC指令不影響進(jìn)位指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志他狀態(tài)標(biāo)志nDEC reg/memDEC reg/memn;reg/memreg/memreg/memreg/mem1 1(7) CMP 比較指令nCMP指令將目的操作數(shù)減去源操作數(shù),指令將目的操作數(shù)減去源操作數(shù),按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志nCMP指令執(zhí)行的功能與指令執(zhí)行的功能與SUB指令,但結(jié)指令,但結(jié)果不回送目的操作數(shù)果不回送目的操作數(shù)nCMP reg,imm/reg/memCMP reg,imm/reg/
24、memn;regregimm/reg/memimm/reg/memnCMP mem,imm/regCMP mem,imm/regn;memmemimm/regimm/reg舉例舉例(7) CMP 比較指令 舉例n例:例:nCMP AL, 0AHnCMP CX, DInCMP DI, BX03nCMP AX, AREA1(7) NEG 求補(bǔ)指令nNEG指令對(duì)操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去指令對(duì)操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去操作數(shù),然后結(jié)果返回操作數(shù)操作數(shù),然后結(jié)果返回操作數(shù)n求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加后加1nNEG指令對(duì)標(biāo)志的影響與用零作減法的指
25、令對(duì)標(biāo)志的影響與用零作減法的SUB指令一樣指令一樣nNEG reg/memNEG reg/memn;reg/mem0reg/mem0reg/memreg/mem(8)乘法指令舉例舉例MUL r8/m8MUL r8/m8;無符號(hào)字節(jié)乘法;無符號(hào)字節(jié)乘法;AXALAXALr8/m8r8/m8MUL r16/m16MUL r16/m16;無符號(hào)字乘法;無符號(hào)字乘法;DX.AXAXDX.AXAXr16/m16r16/m16IMUL r8/m8IMUL r8/m8;有符號(hào)字節(jié)乘法;有符號(hào)字節(jié)乘法;AXALAXALr8/m8r8/m8IMUL r16/m16IMUL r16/m16;有符號(hào)字乘法;有符號(hào)字
26、乘法;DX.AXAXDX.AXAXr16/m16r16/m16(8)乘法指令 舉例n例例1:n2AH 3EHnMOV AL, 2AHnMOV BL, 3EHnMUL BL ;AX=0A2CH,OF = CF = 1 ;AX高高8位含有有效數(shù)值,非符號(hào)擴(kuò)展位含有有效數(shù)值,非符號(hào)擴(kuò)展n例例2n64H 0A5HnMOV AL, 64HnMOV BL, 0A5HnIMUL BL ;AX = 0DC74H,9100,OF = CF = 1 ;AX高高8位含有有效數(shù)值,非符號(hào)擴(kuò)展位含有有效數(shù)值,非符號(hào)擴(kuò)展舉例舉例(9)除法指令DIV r8/m8DIV r8/m8;無符號(hào)字節(jié)除法:;無符號(hào)字節(jié)除法:ALAX
27、ALAXr8/m8r8/m8的商,的商,AhAXAhAXr8/m8r8/m8的余數(shù)的余數(shù)DIV r16/m16DIV r16/m16;無符號(hào)字除法:;無符號(hào)字除法:;AXDX.AXAXDX.AXr16/m16r16/m16的商,的商,DXDX.AXDXDX.AXr16/m16r16/m16的余數(shù)的余數(shù)IDIV r8/m8IDIV r8/m8;有符號(hào)字節(jié)除法:;有符號(hào)字節(jié)除法:ALAXALAXr8/m8r8/m8的商,的商,AhAXAhAXr8/m8r8/m8的余數(shù)的余數(shù)IDIV r16/m16IDIV r16/m16;有符號(hào)字除法:;有符號(hào)字除法:;AXDX.AXAXDX.AXr16/m16r
28、16/m16的商,的商,DXDX.AXDXDX.AXr16/m16r16/m16的余數(shù)的余數(shù)(9)除法指令 舉例n例:例:n3E2CH 5BHnMOV AX, 3E2CHnMOV BL, 5BHnDIV BLnMOV AX,0400H ;AX=400H=1024nMOV BL,0b4H ;BL=b4H=76nIDIV BL ;商ALF3h13 ;余數(shù)AH24H36(10)其它算術(shù)指令舉例舉例CBWCBW;ALAL的符號(hào)擴(kuò)展至的符號(hào)擴(kuò)展至AHAH;如;如ALAL的最高有效位是的最高有效位是0 0,則,則AHAH0000;ALAL的最高有效位為的最高有效位為1 1,則,則AHAHFFHFFH。AL
29、AL不變不變CWDCWD;AXAX的符號(hào)擴(kuò)展至的符號(hào)擴(kuò)展至DXDX;如;如AXAX的最高有效位是的最高有效位是0 0,則,則DXDX0000;AXAX的最高有效位為的最高有效位為1 1,則,則DXDXFFFFHFFFFH。AXAX不變不變(10)其它算術(shù)指令 舉例n例:例:nMOV AL, 0ABHnCBW ;AX = 0FFABHnMOV AX, 1234HnCWD ;DX = 0000H,AX = 1234H4.位操作指令n位操作類指令以二進(jìn)制位為基本單位進(jìn)行數(shù)位操作類指令以二進(jìn)制位為基本單位進(jìn)行數(shù)據(jù)的操作據(jù)的操作n這是一類常用的指令,都應(yīng)該掌握這是一類常用的指令,都應(yīng)該掌握n注意這些指令
30、對(duì)標(biāo)志位的影響注意這些指令對(duì)標(biāo)志位的影響n邏輯運(yùn)算指令邏輯運(yùn)算指令nAND OR XOR NOT TESTn移位指令移位指令nSHL SHR SAR ROL ROR RCL RCR(1) AND 邏輯“與”指令n對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算,結(jié)果送到目的對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算,結(jié)果送到目的操作數(shù)操作數(shù)nAND reg,imm/reg/memAND reg,imm/reg/memnregregregregimm/reg/memimm/reg/memnAND mem,imm/regAND mem,imm/regn;memmemmemmemimm/regimm/regnAND指令設(shè)置指令設(shè)置CF
31、= OF = 0,根據(jù)結(jié)果設(shè)置,根據(jù)結(jié)果設(shè)置SF、ZF和和PF狀態(tài),而對(duì)狀態(tài),而對(duì)AF未定義未定義n例:例:AND AL, 10010011 ;將將AL中的第中的第0、1、4、7位保留,其他位清零位保留,其他位清零(2) OR邏輯“或”指令n對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯或運(yùn)算,結(jié)果送到目的對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯或運(yùn)算,結(jié)果送到目的操作數(shù)操作數(shù)nOR reg,imm/reg/memOR reg,imm/reg/memn;regregregregimm/reg/memimm/reg/memnOR mem,imm/regOR mem,imm/regn;memmemmemmemimm/regimm/regnOR
32、指令設(shè)置指令設(shè)置CF = OF = 0,根據(jù)結(jié)果設(shè)置,根據(jù)結(jié)果設(shè)置SF、ZF和和PF狀態(tài),而對(duì)狀態(tài),而對(duì)AF未定義未定義n例:例:OR BL, 0F0H ;將將BL的高的高4為置為置1,其他位不變,其他位不變(3)XOR邏輯“異或”指令n對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯異或運(yùn)算,結(jié)果送到目對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯異或運(yùn)算,結(jié)果送到目的操作數(shù)的操作數(shù)nXOR reg,imm/reg/memXOR reg,imm/reg/memn;regregregregimm/reg/memimm/reg/memnXOR mem,imm/regXOR mem,imm/regn;memmemmemmemimm/regimm/re
33、gnXOR指令設(shè)置指令設(shè)置CF = OF = 0,根據(jù)結(jié)果設(shè)置,根據(jù)結(jié)果設(shè)置SF、ZF和和PF狀態(tài),而對(duì)狀態(tài),而對(duì)AF未定義未定義n例:例:XOR AL, 0A5H ;將將AL的第的第0、2、5和和7位取反,其他位不變位取反,其他位不變(4) TEST 測試指令n對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算,對(duì)兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算,結(jié)果不回送到目的結(jié)果不回送到目的操作數(shù)操作數(shù)nTEST reg,imm/reg/memTEST reg,imm/reg/memn;regregimm/reg/memimm/reg/memnTEST mem,imm/regTEST mem,imm/regn;memmemimm/re
34、gimm/regnTEST指令設(shè)置指令設(shè)置CF = OF = 0,根據(jù)結(jié)果設(shè)置,根據(jù)結(jié)果設(shè)置SF、ZF和和PF狀態(tài),而對(duì)狀態(tài),而對(duì)AF未定義未定義n例:例:TEST AX, 0010H ;若若ZF = 0,則,則AX第第4位為位為1,否則,第,否則,第4位為位為0(5) NOT邏輯“非”指令n對(duì)一個(gè)操作數(shù)執(zhí)行邏輯非運(yùn)算對(duì)一個(gè)操作數(shù)執(zhí)行邏輯非運(yùn)算nNOT reg/memNOT reg/memn;reg/memreg/memreg/memreg/memnNOT指令是一個(gè)單操作數(shù)指令指令是一個(gè)單操作數(shù)指令nNOT指令不影響標(biāo)志位指令不影響標(biāo)志位n例:例:MOV AL, 5FH NOT AL ;AL
35、= 0A0H,標(biāo)志同上一條指令,不變,標(biāo)志同上一條指令,不變(6) 移位指令n將操作數(shù)移動(dòng)一位或多位,分成邏輯移位和算術(shù)將操作數(shù)移動(dòng)一位或多位,分成邏輯移位和算術(shù)移位,分別具有左移或右移操作移位,分別具有左移或右移操作nSHL reg/mem,1/CL SAL reg/mem,1/CLSHL reg/mem,1/CL SAL reg/mem,1/CLn;邏輯;邏輯/ /算術(shù)左移,最高位進(jìn)入算術(shù)左移,最高位進(jìn)入CFCF,最低位補(bǔ),最低位補(bǔ)0 0nSHR reg/mem,1/CLSHR reg/mem,1/CLn;邏輯右移,最低位進(jìn)入;邏輯右移,最低位進(jìn)入CFCF,最高位補(bǔ),最高位補(bǔ)0 0nSAR
36、 reg/mem,1/CLSAR reg/mem,1/CLn;算術(shù)右移,最低位進(jìn)入;算術(shù)右移,最低位進(jìn)入CFCF,最高位不變,最高位不變舉例舉例演示演示演示演示演示演示(6) 移位指令 舉例n例例1:已知已知(SI) = 1230HnMOV CL, 2nSHL SI, 1;左移左移1位,位,(SI) = 2460H,CF = 0,OF = 0nSAL SI, CL ;左移左移2位,位,(SI) = 9180H,CF = 0,OF值不確定值不確定nSHL SI, 1 ;左移左移1位,位,(SI) = 2300H,CF = 1,OF = 1n例例2:nMOV DX, 9063HnMOV CL, 4
37、nSHR DX, 1 ;右移右移1位,位,(dx) = 4831H,CF = 1,OF = 1nSHR DX, CL ;右移右移4位,位,(dx) = 0483H,CF = 0,OF不確定不確定n例例3:nMOV DX, 9616nMOV CL, 3nSAR DX, 1 ;右移右移1位,位,(dx) = 0CB0BH,CF = 0nSAR DX, CL ;右移右移3位,位,(dx) = 0F961H(7)循環(huán)移位指令n將操作數(shù)從一端移出的位返回到另一端形成將操作數(shù)從一端移出的位返回到另一端形成循環(huán),分成不帶進(jìn)位和帶進(jìn)位,分別具有左循環(huán),分成不帶進(jìn)位和帶進(jìn)位,分別具有左移或右移操作移或右移操作n
38、ROL reg/mem,1/CLROL reg/mem,1/CL n;不帶進(jìn)位循環(huán)左移;不帶進(jìn)位循環(huán)左移nROR reg/mem,1/CLROR reg/mem,1/CL n;不帶進(jìn)位循環(huán)右移;不帶進(jìn)位循環(huán)右移nRCL reg/mem,1/CLRCL reg/mem,1/CL n;帶進(jìn)位循環(huán)左移;帶進(jìn)位循環(huán)左移nRCR reg/mem,1/CLRCR reg/mem,1/CL n;帶進(jìn)位循環(huán)右;帶進(jìn)位循環(huán)右 舉例舉例演示演示演示演示演示演示演示演示(7)循環(huán)移位指令 舉例n例:例:nMOV AX, 56ABHnMOV CL, 4nROL AX, 1 ;循環(huán)左移循環(huán)左移1位位 ;(AX) = 0
39、AD56H,CF = 0,OF = 1nROR AX, CL ;循環(huán)右移循環(huán)右移4位,位,(AX) = 6AD5H,CF = 0n循環(huán)移位指令對(duì)標(biāo)志的影響循環(huán)移位指令對(duì)標(biāo)志的影響n按照指令功能設(shè)置進(jìn)位標(biāo)志按照指令功能設(shè)置進(jìn)位標(biāo)志CFn不影響不影響SF、ZF、PF、AFn如果進(jìn)行一位移動(dòng),則按照操作數(shù)的最高符號(hào)位是否改變,相如果進(jìn)行一位移動(dòng),則按照操作數(shù)的最高符號(hào)位是否改變,相應(yīng)設(shè)置溢出標(biāo)志應(yīng)設(shè)置溢出標(biāo)志OF:如果移位前的操作數(shù)最高位與移位后操作:如果移位前的操作數(shù)最高位與移位后操作數(shù)的最高位不同(有變化),則數(shù)的最高位不同(有變化),則OF = 1;否則;否則OF = 0。當(dāng)移。當(dāng)移位次數(shù)大于
40、位次數(shù)大于1時(shí),時(shí),OF不確定不確定5.串操作指令n串操作指令是串操作指令是80868086指令系統(tǒng)中比較獨(dú)特的一指令系統(tǒng)中比較獨(dú)特的一類指令,采用比較特殊的數(shù)據(jù)串尋址方式,類指令,采用比較特殊的數(shù)據(jù)串尋址方式,常用在操作主存連續(xù)區(qū)域的數(shù)據(jù)時(shí)常用在操作主存連續(xù)區(qū)域的數(shù)據(jù)時(shí)n指令包括:指令包括:MOVS,LODS,STOS,CMPS,SCAS (1) MOVS 串傳送指令n把字節(jié)或字操作數(shù)從主存的源地址傳送至把字節(jié)或字操作數(shù)從主存的源地址傳送至目的地址目的地址nMOVSBMOVSBn;字節(jié)串傳送:;字節(jié)串傳送:ES:DIDS:SIES:DIDS:SIn;SISISISI1 1,DIDIDIDI1
41、 1nMOVSWMOVSWn;字串傳送:;字串傳送:ES:DIDS:SIES:DIDS:SIn;SISISISI2 2,DIDIDIDI2 2舉例舉例(1) MOVS 串傳送指令 舉例n例:例:把把DS數(shù)據(jù)段數(shù)據(jù)段1000H地址開始的地址開始的100個(gè)字節(jié)內(nèi)容順序傳個(gè)字節(jié)內(nèi)容順序傳送到擴(kuò)展段送到擴(kuò)展段2000開始的單元中。使用字節(jié)串傳送指令的程開始的單元中。使用字節(jié)串傳送指令的程序如下:序如下:n MOV SI, 1000H ;源串首地址源串首地址n MOV DI, 2000H ;目的串首地址目的串首地址n MOV CX, 100 ;字節(jié)串長度字節(jié)串長度n CLD ;清除方向標(biāo)志清除方向標(biāo)志
42、nLOOP: MOVSB ;傳送一個(gè)字節(jié)數(shù)據(jù)傳送一個(gè)字節(jié)數(shù)據(jù)n DEC CX ;字節(jié)串長度減字節(jié)串長度減1n JNZ LOOP ;CX不為不為0,轉(zhuǎn)到,轉(zhuǎn)到LOOP繼續(xù)執(zhí)行繼續(xù)執(zhí)行n HLT(2) LODS 串讀取指令n把指定主存單元的數(shù)據(jù)傳送給把指定主存單元的數(shù)據(jù)傳送給AL或或AXnLODSBLODSBn;字節(jié)串讀?。?;字節(jié)串讀?。篈LDS:SIALDS:SIn;SISISISI1 1nLODSWLODSWn;字串讀?。?;字串讀?。篈XDS:SIAXDS:SIn;SISISISI2 2舉例舉例(2) LODS 串讀取指令 舉例n例:例:已知在數(shù)據(jù)段中有已知在數(shù)據(jù)段中有100個(gè)字組成的串,現(xiàn)在
43、要求將其中的負(fù)數(shù)相加,其和數(shù)個(gè)字組成的串,現(xiàn)在要求將其中的負(fù)數(shù)相加,其和數(shù)存放到緊接著該串的下一個(gè)順序地址中。已知串首元素的偏移地址為存放到緊接著該串的下一個(gè)順序地址中。已知串首元素的偏移地址為2000H。程序段代碼:程序段代碼:n CLDn MOV SI, 2000Hn MOV BX, 0n MOV DX, 0n MOV CS, 202nLOOP: DEC CXn DEC CXn JZ STO ;判斷計(jì)數(shù)是否已完判斷計(jì)數(shù)是否已完n LODSW ;從源串中取一個(gè)字送從源串中取一個(gè)字送AXn MOV BX, AXn AND AX, 8000H ;判斷是否為負(fù)數(shù)判斷是否為負(fù)數(shù)n JZ LOOP ;
44、不是負(fù)數(shù),轉(zhuǎn)到不是負(fù)數(shù),轉(zhuǎn)到LOOP繼續(xù)取字串中的一個(gè)字繼續(xù)取字串中的一個(gè)字n ADD DX, BX ;求負(fù)數(shù)元素之和,存在求負(fù)數(shù)元素之和,存在DX中中n JMP LOOP nSTO: MOV SI, DX ;負(fù)數(shù)元素之和寫入順序地址中負(fù)數(shù)元素之和寫入順序地址中n HLT(3) STOS 串存入指令n把把AL或或AX數(shù)據(jù)傳送至目的地址數(shù)據(jù)傳送至目的地址nSTOSBSTOSBn;字節(jié)串存儲(chǔ):;字節(jié)串存儲(chǔ):ES:DIALES:DIALn;DIDIDIDI1 1nSTOSWSTOSWn;字串存儲(chǔ):;字串存儲(chǔ):ES:DIAXES:DIAXn;DIDIDIDI2 2舉例舉例(3) STOS 串存入指令
45、舉例n例:例:內(nèi)存有一個(gè)數(shù)據(jù)緩沖區(qū)起始地址內(nèi)存有一個(gè)數(shù)據(jù)緩沖區(qū)起始地址BLOCK,共存放,共存放100個(gè)個(gè)8為帶符號(hào)數(shù),編程實(shí)現(xiàn)把該區(qū)域內(nèi)正數(shù)、負(fù)數(shù)分離,分別為帶符號(hào)數(shù),編程實(shí)現(xiàn)把該區(qū)域內(nèi)正數(shù)、負(fù)數(shù)分離,分別送到同一段內(nèi)兩個(gè)緩沖區(qū)內(nèi)。正數(shù)存放在送到同一段內(nèi)兩個(gè)緩沖區(qū)內(nèi)。正數(shù)存放在PLUS_DATA開始開始的單元內(nèi),負(fù)數(shù)存放在的單元內(nèi),負(fù)數(shù)存放在MINUS_DATA開始的單元中。開始的單元中。n程序段代碼:程序段代碼:n PUSH DSn POP ESn MOV SI, OFFSET BLOCKn MOV DI, OFFSET PLUS_DATAn MOV BX, OFFSET MINUS_DA
46、TAn MOV CX, 100n CLD(3) STOS 串存入指令 舉例(續(xù))nLOOP1: LODSBn TEST AL, 80Hn JNZ MINUS ;如果是負(fù)數(shù),轉(zhuǎn)到如果是負(fù)數(shù),轉(zhuǎn)到MINUSn STOSB ;否則,存正數(shù)否則,存正數(shù)n JMP AGAINnMINUS: XCHG BX, DIn STOSB ;存負(fù)數(shù)存負(fù)數(shù)n XCHG BX, DInAGAIN: DEC CXn JNZ LOOP1n HLT(4) CMPS 串比較指令n將主存中的源操作數(shù)減去至目的操作數(shù),以將主存中的源操作數(shù)減去至目的操作數(shù),以便設(shè)置標(biāo)志,進(jìn)而比較兩操作數(shù)之間的關(guān)系便設(shè)置標(biāo)志,進(jìn)而比較兩操作數(shù)之間的關(guān)
47、系nCMPSBCMPSBn;字節(jié)串比較:;字節(jié)串比較:DS:SIDS:SIES:DIES:DIn;SISISISI1 1,DIDIDIDI1 1nCMPSWCMPSWn;字串比較:;字串比較:DS:SIDS:SIES:DIES:DIn;SISISISI2 2,DIDIDIDI2 2舉例舉例(4) CMPS 串比較指令 舉例n例:例:編程實(shí)現(xiàn)比較編程實(shí)現(xiàn)比較DS段段100H和和200開始的開始的100個(gè)字符是個(gè)字符是否相同。否相同。n程序段代碼:程序段代碼:n MOV AX, DSn MOV ES, AXn MOV DI, 200Hn MOV SI, 300Hn CLDn MOV CX, 100
48、Hn XOR AX, AXn REPZ CMPSBn JZ DONEn ;字符串不相同對(duì)應(yīng)的處理程序段字符串不相同對(duì)應(yīng)的處理程序段nDONE: ;字符串相同對(duì)應(yīng)的處理程序段字符串相同對(duì)應(yīng)的處理程序段(5) SCAS 串掃描指令n將將AL/AX減去至目的操作數(shù),以便設(shè)置標(biāo)減去至目的操作數(shù),以便設(shè)置標(biāo)志,進(jìn)而比較志,進(jìn)而比較AL/AX與操作數(shù)之間的關(guān)系與操作數(shù)之間的關(guān)系nSCASBSCASBn;字節(jié)串掃描:;字節(jié)串掃描:ALALES:DIES:DIn;DIDIDIDI1 1nSCASWSCASWn;字串掃描:;字串掃描:AXAXES:DIES:DIn;DIDIDIDI2 2舉例舉例(5) SCAS
49、 串掃描指令 舉例n例:例:尋找字符串中是否包含字符尋找字符串中是否包含字符“A”。n程序段代碼:程序段代碼:n MOV DI, OFFSET STRNn MOV CX, N ;串長度串長度n MOV AL, A ;關(guān)鍵字符關(guān)鍵字符n CLDnAGAIN: SCASBn JZ FIND ;找到關(guān)鍵字符,轉(zhuǎn)找到關(guān)鍵字符,轉(zhuǎn)FINDn DEC CXn JNZ AGAINn MOV AL, 0 ;未找到關(guān)鍵字符,未找到關(guān)鍵字符,AL置置0n JMP EXITnFIND: MOV AL, 0FFHnEXIT: MVO RSLT, AL3.2 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)n完整的匯編語言源程序由段組
50、成完整的匯編語言源程序由段組成n一個(gè)匯編語言源程序可以包含若干個(gè)代碼段、數(shù)一個(gè)匯編語言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列意排列n需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起始點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)程序執(zhí)行的起始點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)n所有的可執(zhí)行性語句必須位于某一個(gè)代碼段內(nèi),所有的可執(zhí)行性語句必須位于某一個(gè)代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)說明性語句可根據(jù)需要位于任一段內(nèi)n通常,程序還需要一個(gè)堆棧段通常,程序還需要一個(gè)堆棧段3.2.1 匯編語
51、言的語句格式匯編語言的語句格式執(zhí)行性語句執(zhí)行性語句執(zhí)行性語句用于表達(dá)處理器執(zhí)行性語句用于表達(dá)處理器指令指令(也稱為硬指令也稱為硬指令),匯編后對(duì)應(yīng)一條指令,匯編后對(duì)應(yīng)一條指令代碼。由處理器指令組成的代碼序列是程序代碼。由處理器指令組成的代碼序列是程序設(shè)計(jì)的主體設(shè)計(jì)的主體標(biāo)號(hào)標(biāo)號(hào): 硬指令助記符硬指令助記符 操作數(shù)操作數(shù),操作數(shù)操作數(shù) ;注釋注釋說明性語句說明性語句說明性語句用于表達(dá)偽指令說明性語句用于表達(dá)偽指令,指示源程序如何匯編、變量怎樣定義、過,指示源程序如何匯編、變量怎樣定義、過程怎么設(shè)置等程怎么設(shè)置等名字名字 偽指令助記符偽指令助記符 參數(shù)參數(shù),參數(shù)參數(shù), ;注釋注釋3.2.1 匯編語
52、言的語句格式匯編語言的語句格式(續(xù)續(xù))n硬指令(硬指令(Instruction)使使CPU產(chǎn)生動(dòng)作產(chǎn)生動(dòng)作、并在程序執(zhí)行時(shí)才處理的指令、并在程序執(zhí)行時(shí)才處理的指令硬指令就是第硬指令就是第2章學(xué)習(xí)的處理器指令,與具體章學(xué)習(xí)的處理器指令,與具體的處理器有關(guān)、與匯編程序無關(guān)的處理器有關(guān)、與匯編程序無關(guān)n偽指令(偽指令(Directive)不產(chǎn)生不產(chǎn)生CPU動(dòng)作、動(dòng)作、在程序執(zhí)行前由匯編程序處理的說明性指令在程序執(zhí)行前由匯編程序處理的說明性指令偽指令與具體的處理器類型無關(guān),但與匯編偽指令與具體的處理器類型無關(guān),但與匯編程序有關(guān)。不同版本的匯編程序支持不同的程序有關(guān)。不同版本的匯編程序支持不同的偽指令偽
53、指令1.簡化段定義格式.model small;定義程序的存儲(chǔ)模式(小型模式);定義程序的存儲(chǔ)模式(小型模式).stack;定義堆棧段(默認(rèn)是;定義堆棧段(默認(rèn)是1KB空間)空間).data;定義數(shù)據(jù)段;定義數(shù)據(jù)段;數(shù)據(jù)定義;數(shù)據(jù)定義.code;定義代碼段;定義代碼段start: mov ax,data ;程序起始點(diǎn);程序起始點(diǎn)mov ds,ax;設(shè)置;設(shè)置DS指向用戶定義的數(shù)據(jù)段指向用戶定義的數(shù)據(jù)段;程序代碼;程序代碼mov ax,4c00hint 21h;程序結(jié)束點(diǎn),返回;程序結(jié)束點(diǎn),返回DOS;子程序代碼;子程序代碼end start;匯編結(jié)束,指明程序起始點(diǎn);匯編結(jié)束,指明程序起始點(diǎn)s
54、tart2.完整段定義格式n完整段定義利用完整段定義利用SEGMENT和和ENDS一對(duì)偽指一對(duì)偽指令定義邏輯段令定義邏輯段n同時(shí)需要配合同時(shí)需要配合ASSUME偽指令指明邏輯段是偽指令指明邏輯段是代碼段、堆棧段、數(shù)據(jù)段還是附加段代碼段、堆棧段、數(shù)據(jù)段還是附加段n完整段定義的優(yōu)勢是可以指明邏輯段的定位完整段定義的優(yōu)勢是可以指明邏輯段的定位、組合、類別等屬性;而簡化段定義只能采、組合、類別等屬性;而簡化段定義只能采用系統(tǒng)默認(rèn)的屬性用系統(tǒng)默認(rèn)的屬性n完整段定義和簡化段定義的實(shí)質(zhì)是一致的完整段定義和簡化段定義的實(shí)質(zhì)是一致的3.2.2 常量、變量和標(biāo)號(hào)n匯編語言的數(shù)據(jù)可以簡單分為常量和變量匯編語言的數(shù)據(jù)
55、可以簡單分為常量和變量n常量可以作為硬指令的立即數(shù)或偽指令的參常量可以作為硬指令的立即數(shù)或偽指令的參數(shù),變量主要作為存儲(chǔ)器操作數(shù)數(shù),變量主要作為存儲(chǔ)器操作數(shù)n匯編語言語句中的名字和標(biāo)號(hào)具有邏輯地址匯編語言語句中的名字和標(biāo)號(hào)具有邏輯地址和類型屬性,主要用做地址操作數(shù),也可以和類型屬性,主要用做地址操作數(shù),也可以作為立即數(shù)和存儲(chǔ)器操作數(shù)作為立即數(shù)和存儲(chǔ)器操作數(shù)1.常量n常量表示一個(gè)固定的數(shù)值,它又分成多常量表示一個(gè)固定的數(shù)值,它又分成多種形式種形式n常數(shù)常數(shù)n字符串字符串n符合常量符合常量n數(shù)值表達(dá)式數(shù)值表達(dá)式2.變量 n變量變量實(shí)質(zhì)上是指內(nèi)存單元的數(shù)據(jù),雖然內(nèi)存實(shí)質(zhì)上是指內(nèi)存單元的數(shù)據(jù),雖然內(nèi)存
56、單元地址不變,但其中存放的數(shù)據(jù)可以改變單元地址不變,但其中存放的數(shù)據(jù)可以改變n變量需要事先定義才能使用變量需要事先定義才能使用n變量定義(變量定義(Define)偽指令為變量申請(qǐng)固定)偽指令為變量申請(qǐng)固定長度為單位的存儲(chǔ)空間,并可以同時(shí)將相應(yīng)長度為單位的存儲(chǔ)空間,并可以同時(shí)將相應(yīng)的存儲(chǔ)單元初始化的存儲(chǔ)單元初始化n定義后的變量可以利用變量名等方法引用其定義后的變量可以利用變量名等方法引用其中的數(shù)據(jù),即變量的數(shù)值中的數(shù)據(jù),即變量的數(shù)值2.變量(續(xù))n 變量的定義變量的定義n變量定義的匯編語言格式為:變量定義的匯編語言格式為:變量名變量名 偽指令偽指令 初值表初值表n變量名為用戶自定義標(biāo)識(shí)符,表示初
57、值表首元素的邏輯變量名為用戶自定義標(biāo)識(shí)符,表示初值表首元素的邏輯地址,常稱為符號(hào)地址。變量名也可以沒有地址,常稱為符號(hào)地址。變量名也可以沒有n初值表是用逗號(hào)分隔的參數(shù)初值表是用逗號(hào)分隔的參數(shù),主要由常量、數(shù)值表達(dá)式或主要由常量、數(shù)值表達(dá)式或“?”組成。其中組成。其中“?”表示未賦初值表示未賦初值n多個(gè)存儲(chǔ)單元如果初值相同,可以用復(fù)制操作符多個(gè)存儲(chǔ)單元如果初值相同,可以用復(fù)制操作符DUP進(jìn)進(jìn)行定義:行定義:重復(fù)次數(shù)重復(fù)次數(shù) DUP(重復(fù)參數(shù)重復(fù)參數(shù))n變量定義偽指令有變量定義偽指令有DB、DW、DD等等2.變量(續(xù))nDB偽指令用于分配一個(gè)或多個(gè)字節(jié)單元,并偽指令用于分配一個(gè)或多個(gè)字節(jié)單元,并可
58、以將它們初始化為指定值可以將它們初始化為指定值n初值表中每個(gè)數(shù)據(jù)一定是字節(jié)量,存放一個(gè)初值表中每個(gè)數(shù)據(jù)一定是字節(jié)量,存放一個(gè)8位數(shù)據(jù):位數(shù)據(jù):n可以是可以是0255的無符號(hào)數(shù)的無符號(hào)數(shù)n或是或是128127帶符號(hào)數(shù)帶符號(hào)數(shù)n也可以是字符串常數(shù)也可以是字符串常數(shù)2.變量(續(xù))nDW偽指令用于分配一個(gè)或多個(gè)字單元,并偽指令用于分配一個(gè)或多個(gè)字單元,并可以將它們初始化為指定值可以將它們初始化為指定值n初值表中每個(gè)數(shù)據(jù)是字量,一個(gè)字單元可用初值表中每個(gè)數(shù)據(jù)是字量,一個(gè)字單元可用于存放任何于存放任何16位數(shù)據(jù):位數(shù)據(jù):n一個(gè)段地址一個(gè)段地址n一個(gè)偏移地址一個(gè)偏移地址n兩個(gè)字符兩個(gè)字符n065535之間的
59、無符號(hào)數(shù)之間的無符號(hào)數(shù)n3276832767之間的帶符號(hào)數(shù)之間的帶符號(hào)數(shù)2.變量(續(xù))n例:例:nVAR_DATASEGMENTnMAXEQU64H ;定義符號(hào)常量,定義符號(hào)常量,MAX = 64HnBDATA1DB 01100001b, 97, 61H, a ;定義字節(jié)變量,存儲(chǔ)單元均為定義字節(jié)變量,存儲(chǔ)單元均為61HnBDATA2 DB MAX, MAX 10H ;定義字節(jié)變量,用常量和數(shù)值表達(dá)式來賦初值定義字節(jié)變量,用常量和數(shù)值表達(dá)式來賦初值nWDATA1 DW 1234H ;定義字變量定義字變量nDW ?, 4 dup(1122H) ;預(yù)留一個(gè)字空間,將預(yù)留一個(gè)字空間,將1122H復(fù)制
60、定義復(fù)制定義4個(gè)個(gè) nDDATA DD 12345678H ;定義雙字變量定義雙字變量nCHAR DB a, s, m ;定義字符變量,以字節(jié)形式存儲(chǔ)定義字符變量,以字節(jié)形式存儲(chǔ)nSTRING DB COMPUTER ;定義字符串變量定義字符串變量nARRAY DB 2 DUP(1,2,2 DUP(3) ;復(fù)制相同的操作數(shù),內(nèi)容為:復(fù)制相同的操作數(shù),內(nèi)容為:01 02 03 03 01 02 03 03 nVAR_DATA ENDS3.2.3順序程序設(shè)計(jì)順序程序設(shè)計(jì)n沒有分支、循環(huán)等轉(zhuǎn)移指令的程序,會(huì)按沒有分支、循環(huán)等轉(zhuǎn)移指令的程序,會(huì)按指令書寫的前后順利依次執(zhí)行,這就是順指令書寫的前后順利依
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024正規(guī)版教師聘用合同樣本
- 2024辦公樓出租合同書
- 第五章第1節(jié)練習(xí)
- 購物廣場項(xiàng)目計(jì)劃書
- 居間合同范文(35篇)
- 建筑工程年終總結(jié)范文大全
- 2023年江西文化演藝發(fā)展集團(tuán)有限責(zé)任公司所屬單位招聘筆試真題
- 寫字樓租賃醫(yī)療診所與健康中心協(xié)議
- 2024年解熱鎮(zhèn)痛類藥物項(xiàng)目建議書
- 2024銷售人員勞動(dòng)合同書范文
- 民間借貸利息計(jì)算表
- 滬科版(2024)八年級(jí)全一冊物理第一學(xué)期期中學(xué)業(yè)質(zhì)量測試卷 2套(含答案)
- Q GDW 10115-2022 110kV~1000kV架空輸電線路施工及驗(yàn)收規(guī)范
- 2023《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀PPT
- 核心素養(yǎng)導(dǎo)向下初中數(shù)學(xué)課堂作業(yè)多元化設(shè)計(jì)
- 愚公移山英文 -中國故事英文版課件
- 國開經(jīng)濟(jì)學(xué)(本)1-14章練習(xí)試題及答案
- 辯論賽評(píng)分表(完整版)-
- 電子商務(wù)支付與安全課程標(biāo)準(zhǔn)
- 高考語文總復(fù)習(xí)古詩文閱讀專題二第一編第1講 詩歌之“內(nèi)組”——3個(gè)層面解構(gòu)詩歌基本內(nèi)蘊(yùn)
- Program Management Operations Process(PMOP).ppt
評(píng)論
0/150
提交評(píng)論