匯編語(yǔ)言程序設(shè)計(jì)綜述_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)綜述_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)綜述_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)綜述_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)綜述_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第三章匯編語(yǔ)言程序設(shè)計(jì)3.18086的指令系統(tǒng)機(jī)器指令:命令機(jī)器做某種操作的一條語(yǔ)句稱為一個(gè)機(jī)器指令;指令系統(tǒng):全部機(jī)器指令的集合稱為指令系統(tǒng)。匯編語(yǔ)言:是機(jī)器語(yǔ)言的一種助記符形式,與機(jī)器語(yǔ)言一一對(duì)應(yīng);高級(jí)語(yǔ)言匯編語(yǔ)言機(jī)器語(yǔ)言一、指令格式操作碼:告訴計(jì)算機(jī)執(zhí)行什么性質(zhì)的操作,每條指令只能有一個(gè)操作碼;操作數(shù):告訴計(jì)算機(jī)對(duì)什么樣的對(duì)象進(jìn)行操作,8086指令系統(tǒng)中,操作數(shù)的數(shù)目有0~2個(gè)。2個(gè)操作數(shù):MOV AX,BX1個(gè)操作數(shù):INC AX0個(gè)操作數(shù):CLI操作碼

操作數(shù)1,操作數(shù)2匯編語(yǔ)言機(jī)器語(yǔ)言MOD含義MOD含義00存儲(chǔ)器方式,無位移量01存儲(chǔ)器方式,有8位位移量10存儲(chǔ)器方式,有16位位移量11寄存器方式,無位移量REGW=1W=0REGW=1W=0000AXAL100SPAH001CXCL101BPCH010DXDL110SIDH011BXBL111DIBHD01含義寄存器為源寄存器寄存器為目的寄存器MODR/M存儲(chǔ)器方式寄存器方式有效地址的計(jì)算公式W=0W=100011011000BX+SIBX+SI+D8BX+SI+D16ALAX001BX+DIBX+DI+D8BX+DI+D16CLCX010BP+SIBP+SI+D8BP+SI+D16DLDX011BP+DIBP+DI+D8BP+DI+D16BLBX100SISI+D8SI+D16AHSP101DIDI+D8DI+D16CHBP110D16BP+D8BP+D16DHSI111BXBX+D8BX+D16BHDI匯編語(yǔ)言機(jī)器語(yǔ)言匯編語(yǔ)言:MOV AX,[BX+SI]機(jī)器語(yǔ)言:8B00HD=1:寄存器為目的寄存器;W=1:16操作;MOD=00:從存儲(chǔ)器中讀,無偏移;REG=000:AX,結(jié)合D,目的為AX;R/M=000:結(jié)合MOD,[BX+SI]。匯編語(yǔ)言機(jī)器語(yǔ)言1000101100000000操作碼DWMODREGR/MCPU:計(jì)算指令物理地址

CS╳10H+IP=40000H+1000H=41000HCPU:指令物理地址(41000H)地址總線存儲(chǔ)器:指令(8B00H)數(shù)據(jù)總線CPU:指令指令譯碼器執(zhí)行控制電路CPU:計(jì)算數(shù)據(jù)偏移地址

BX+SI=14A0H+000AH=14AAHCPU:計(jì)算數(shù)據(jù)物理地址

DS╳10H+偏移地址=10000H+14AAH=114AAHCPU:數(shù)據(jù)物理地址(114AAH)地址總線存儲(chǔ)器:數(shù)據(jù)(B0A1)數(shù)據(jù)總線CPU:數(shù)據(jù)寄存器

AX=B0A1H機(jī)器指令的執(zhí)行A1B0008B114AAH114ABH41000H41001HCS:4000H,DS:1000HIP:1000HBX:14A0H,SI:0AHMOV AX,[BX+SI]二、尋址方式所謂指令的尋址方式是指在指令中操作數(shù)的表示方式。8086的尋址方式包括:立即尋址、寄存器尋址、存儲(chǔ)器尋址、串操作尋址、外設(shè)I/O端口尋址和程序轉(zhuǎn)移尋址。指令直接給出操作數(shù)的數(shù)值,機(jī)器碼的最后1或2個(gè)字節(jié)就是操作數(shù)—立即數(shù)。例:MOV AX,1020H MOV BH,100立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。1、立即尋址操作數(shù)在寄存器中,寄存器的內(nèi)容就是操作數(shù)的數(shù)值。例:MOV CX,AX MOV AH,AL MOV DS,AXIP寄存器不能作為操作數(shù)。2、寄存器尋址操作數(shù)在存儲(chǔ)器中,指令中給出存儲(chǔ)器的(偏移)地址。直接尋址:MOV DX,[2100H]寄存器間接尋址:MOV CX,[SI]

MOV [BX],AL可以用于間接尋址的寄存器:BX,SI,DI,BP。注意區(qū)分:“MOVAX,BX”和”MOVAX,[BX]”的不同

“MOVAX,1000H”和”MOVAX,[1000H]”3、存儲(chǔ)器尋址基址尋址:MOV [BX+200H],AX變址尋址:MOV CX,[SI+246]基址變址尋址:MOV [BX+SI],DL

MOV CX,[BX+DI+100H]基址寄存器:BX,BP,變址寄存器:SI,DI基址變址尋址中只能有一個(gè)基址寄存器和一個(gè)變址寄存器注意:包括BP的基址尋址或基址變址尋址的默認(rèn)段寄存器為SS,而不是DS。3、存儲(chǔ)器尋址名稱程序名命令行生成匯編程序MASMmasma.asma.obj連接程序LINKlinka.obja.exe調(diào)試程序DEBUGdebuga.exe三、匯編語(yǔ)言程序DATA SEGMENT STRING DB ‘HelloWorld!’,‘$’DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX

MOV DX,OFFSETSTRING MOV AH,9 INT 21H MOV AX,4C00H INT 21HCODE ENDSSTACK SEGMENT STACK DB 256DUP(?)STACK ENDS END START例1:第一個(gè)程序分段結(jié)構(gòu):包括數(shù)據(jù)段、代碼段和堆棧段。語(yǔ)句行:指令性語(yǔ)句:真正對(duì)應(yīng)著由CPU執(zhí)行的機(jī)器指令的語(yǔ)句。指示性語(yǔ)句:不產(chǎn)生機(jī)器指令,只是告訴MASM如何去匯編程序的語(yǔ)句。宏匯編語(yǔ)言程序DATA SEGMENT STRING DB ‘HelloWorld!’,‘$’DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:

MOV AX,DATA MOV DS,AX

MOV DX,OFFSETSTRING MOV AH,9 INT 21H MOV AX,4C00H INT 21HCODE ENDSSTACK SEGMENT STACK DB 256DUP(?)STACK ENDS END START指令性語(yǔ)句指示性語(yǔ)句指示性語(yǔ)句數(shù)據(jù)段代碼段堆棧段DATA SEGMENT STRING DB ‘HelloWorld!’,‘$’DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX

MOV DX,OFFSETSTRING MOV AH,9 INT 21H

MOV AX,4C00H INT 21HCODE ENDSSTACK SEGMENT STACK DB 256DUP(?)STACK ENDS END START數(shù)據(jù)定義程序代碼程序框架1、段定義偽指令

段起始和結(jié)束偽指令

段名SEGMENT

段名ENDS2)段寄存器與段關(guān)系說明偽指令

ASSUME 段寄存器:段名,段寄存器:段名,… 3)程序開始和結(jié)束偽指令

END偽指令一方面通知匯編程序結(jié)束匯編,同時(shí)指明

標(biāo)號(hào)語(yǔ)句為程序開始執(zhí)行的起始地址。指示性語(yǔ)句2、數(shù)據(jù)定義偽指令1)常量定義 格式: 表達(dá)式名 EQU 表達(dá)式

2)數(shù)據(jù)定義 格式:變量名(標(biāo)號(hào))數(shù)據(jù)類型定義偽指令表達(dá)式

DB 1個(gè)字節(jié),8位

DW 2個(gè)字節(jié),16位

DD 4個(gè)字節(jié),32位

DQ 8個(gè)字節(jié),64位

DT 10個(gè)字節(jié),80位3)重復(fù)偽指令

格式: 重復(fù)次數(shù) DUP (重復(fù)內(nèi)容)指示性語(yǔ)句3、匯編語(yǔ)句定位偽指令

ORG語(yǔ)句用來定義起始位置,可以用來定位數(shù)據(jù)和程序 格式:

ORG 表達(dá)式4、取段址和取偏移址偽指令 格式:

SEG 地址標(biāo)號(hào)或變量名

OFFSET 地址標(biāo)號(hào)或變量名指示性語(yǔ)句數(shù)據(jù)傳送指令:

MOV

把源操作數(shù)送給目的操作數(shù)

XCHG

交換兩個(gè)操作數(shù)的數(shù)據(jù)

PUSH,POP

把操作數(shù)壓入或取出堆棧

PUSHF,POPF, 堆棧指令群

PUSHA,POPA

LEA,LDS,LES

取地址至寄存器

XLAT(XLATB) 查表指令四、8086指令系統(tǒng)8086指令系統(tǒng)算術(shù)運(yùn)算指令:

ADD,ADC

加法指令

SUB,SBB

減法指令

INC,DEC

加一或減一

NEG

取二進(jìn)制補(bǔ)碼

MUL,IMUL

乘法指令

DIV,IDIV

除法指令

CBW,CWD

有符號(hào)數(shù)擴(kuò)展指令

AAA,AAS,AAM,AAD 非壓BCD碼運(yùn)算調(diào)整指令

DAA,DAS 壓縮BCD碼調(diào)整指令8086指令系統(tǒng)位運(yùn)算指令:AND,OR,XOR,NOT,TEST

邏輯運(yùn)算SHR,SHL,SAR,SAL

移位指令ROR,ROL,RCR,RCL

循環(huán)移位指令

8086指令系統(tǒng)程序轉(zhuǎn)移指令: CLC,STC,CMC 設(shè)定進(jìn)位標(biāo)志 CLD,STD 設(shè)定方向標(biāo)志

CLI,STI

設(shè)定中斷標(biāo)志

CMP

比較

JMP

跳往指定地址執(zhí)行

JXX

條件轉(zhuǎn)移指令

LOOP

循環(huán)指令 LOOPE(Z) 條件循環(huán)指令

CALL,RET

子程序調(diào)用,返回指令

INT,IRET

中斷調(diào)用及返回指令8086指令系統(tǒng)串操作指令: MOVSB,MOVSW,MOVSD 字符串傳送指令

CMPSB,CMPSW,CMPSD 字符串比較指令

SCASB,SCASW 字符串搜索指令

LODSB,LODSW 字符串載入指令

STOSB,STOSW 字符串存貯指令

REP,REPE,REPNE 重復(fù)前綴指令五、順序程序設(shè)計(jì)

1、數(shù)據(jù)傳送指令

一般傳送指令格式: MOV 目的,源功能:該指令將源內(nèi)容送至目的地址中

交換指令格式:

XCHG 操作數(shù)1,操作數(shù)2功能:源操作數(shù)內(nèi)容和目的操作數(shù)對(duì)調(diào)。

非法傳送方式:立即數(shù)作為目的: MOV 12H,AL16位立即數(shù)8位寄存器: MOV BH,1000H立即數(shù)段寄存器: MOV DS,2000H存儲(chǔ)器存儲(chǔ)器: MOV [BX],[1000H]數(shù)據(jù)傳送指令DATA SEGMENT ORG 100H BUF DW 4B10H,1020H,10H,22H,4C21H ADDR DD 56781234h AD_BUF DD BUF STRING DB ‘a(chǎn)bcd’ AD_STRING DD STRING OFF_STRING DW STRINGDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,BUF ;AX=? MOV DX,WORDPTRADDR ;DX=?例2:數(shù)據(jù)傳送,DATA=2000H物理地址存儲(chǔ)內(nèi)容20100H10H20101H4BH20102H20H20103H10H20104H10H20105H00H20106H22H20107H00H20108H21H20109H4CH2010AH34H2010BH12H2010CH78H2010DH56H MOV AX,SEGADDR ;AX=? MOV DS,AX MOV CX,BUF+2 ;CX=? MOV SI,OFFSETAD_BUF ;SI=? MOV AL,STRING ;AL=? MOV AX,OFF_STRING ;AX=? XCHG CX,AX ;CX=? ;AX=? MOV AX,4C00H INT 21HCODE ENDS ENDSTART物理地址存儲(chǔ)內(nèi)容2010EH00H2010FH01H20110H00H20111H20H20112H61H20113H62H20114H63H20115H64H20116H12H20117H01H20118H00H20119H20H2011AH12H2011BH01H2、算術(shù)運(yùn)算指令

加減運(yùn)算指令格式:

ADD/ADC 目的操作數(shù),源操作數(shù)

SUB/SBB 目的操作數(shù),源操作數(shù)功能:

ADD: 目的操作數(shù)=目的操作數(shù)+源操作數(shù)

SUB: 目的操作數(shù)=目的操作數(shù)–源操作數(shù)

ADC: 目的操作數(shù)=目的操作數(shù)+源操作數(shù)+CF SBB: 目的操作數(shù)=目的操作數(shù)–源操作數(shù)–CF影響標(biāo)志位:

進(jìn)位標(biāo)志:CF,奇偶標(biāo)志:PF,零標(biāo)志:ZF,符號(hào)標(biāo)志:SF

溢出標(biāo)志:OF,輔助進(jìn)位標(biāo)志:AF算術(shù)運(yùn)算指令DATA SEGMENT VAR8_1 DB 78H VAR8_2 DB 52H VAR8_3 DB 3AH VAR16_1 DW 3411H VAR16_2 DW 3ABCH VAR16_3 DW 4020H VAR32_1 DD 0AABBCCDDH VAR32_2 DD 12345678H VAR32_3 DD 11223344H RESULT1 DB ? RESULT2 DW ? RESULT3 DD ?DATA ENDS例3:8,16,32加減法運(yùn)算CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,VAR8_1 ;8位運(yùn)算

ADD AL,VAR8_2 SUB AL,VAR8_3 MOV RESULT1,AL MOV AX,VAR16_1 ;16位運(yùn)算

ADD AX,VAR16_2 SUB AX,VAR16_3 MOV RESULT2,AX

MOV AX,WORDPTRVAR32_1 ;32位運(yùn)算

MOV DX,WORDPTRVAR32_1+2 ADD AX,WORDPTRVAR32_2 ADC DX,WORDPTRVAR32_2+2 SUB AX,WORDPTRVAR32_3 SBB DX,WORDPTRVAR32_3+2 MOV WORDPTRRESULT3,AX MOV WORDPTRRESULT3+2,DX MOV AX,4C00H INT 21HCODE ENDS END START

加一、減一指令格式:

INC 操作數(shù)

DEC 操作數(shù)功能: 操作數(shù)加一或減一影響標(biāo)志位: 不影響進(jìn)位標(biāo)志CF,但影響零標(biāo)志ZF。

算術(shù)運(yùn)算指令

乘除指令格式:

MUL/DIV 源操作數(shù)

IMUL/IDIV 源操作數(shù)功能:

MUL/DIV:無符號(hào)數(shù)乘/除法;

IMUL/IDIV:有符號(hào)數(shù)乘/除法;

指令只給出源操作數(shù),目的操作數(shù)隱含。算術(shù)運(yùn)算指令運(yùn)算被乘/除數(shù)源操作數(shù)結(jié)果8位乘8位AL8位AX16位乘16位AX16位DX:AX16位除8位AX8位商:AL,余數(shù):AH32位除16位DX:AX16位商:AX,余數(shù):DXDATA SEGMENT X DW 25 Y DW 20 Z DW 140 V DW 50 F DW 2DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,X IMUL Y ;DX:AX=X*Y

MOV CX,AX MOV BX,DX ;BX:CX=X*Y MOV AX,Z CWD ;DX:AX=Z ADD CX,AX ADC BX,DX ;BX:CX=X*Y+Z SUB CX,540 SBB BX,0 ;BX:CX=X*Y+Z-540 MOV AX,V CWD ;DX:AX=V SUB AX,CX SBB DX,BX ;DX:AX=V–(X*Y+Z-540) IDIV X ;AX=(V-(X*Y+Z-540))/X(商) ;DX=(V-(X*Y+Z-540))/X(余數(shù)) MOV F,AX MOV F+2,DX MOV AX,4C00H INT 21HCODE ENDS END START2、位運(yùn)算指令

邏輯運(yùn)算指令格式:

NOT 目的操作數(shù) AND 目的操作數(shù),源操作數(shù)

OR 目的操作數(shù),源操作數(shù)

XOR 目的操作數(shù),源操作數(shù) TEST 目的操作數(shù),源操作數(shù)功能:

NOT:

目的操作數(shù)按位取反; AND,OR,XOR:目的操作數(shù)與源操作數(shù)按位進(jìn)行與、或、異或運(yùn)

算,結(jié)果保存在目的操作數(shù)中。 TEST: 作用同AND指令相同,但結(jié)果不保存在目的操作

數(shù)中,只是影響標(biāo)志位。位運(yùn)算指令

算術(shù)移位指令格式:

SAL 目的操作數(shù),計(jì)數(shù)值

SAR 目的操作數(shù),計(jì)數(shù)值移位示意圖位運(yùn)算指令SAL:SAR:

邏輯移位指令格式:

SHL 目的操作數(shù),計(jì)數(shù)值

SHR 目的操作數(shù),計(jì)數(shù)值移位示意圖位運(yùn)算指令SHL:SHR:

不帶進(jìn)位位的循環(huán)移位指令格式:

ROL 目的操作數(shù),計(jì)數(shù)值

ROR 目的操作數(shù),計(jì)數(shù)值移位示意圖位運(yùn)算指令ROL:ROR:

帶進(jìn)位位的循環(huán)移位指令格式:

RCL 目的操作數(shù),計(jì)數(shù)值

RCR 目的操作數(shù),計(jì)數(shù)值移位示意圖位運(yùn)算指令RCL:RCR: DATA SEGMENT DAT1 DW 0109H DATA ENDS CODE SEGMENT … MOV AX,DAT1 MOV CL,4 SHL AH,CL ROL AX,CL ROL AL,CL MOV BYTEPTRDAT1,AL … CODE ENDS …例5:非壓縮BCD碼壓縮BCD碼0109H19H(例3-18)六、分支程序設(shè)計(jì)1、比較指令格式:

CMP 目的操作數(shù),源操作數(shù)功能:

同SUB指令相似,但結(jié)果不保存到目的操作數(shù)中,只是

影響標(biāo)志位。2、無條件轉(zhuǎn)移指令格式:

JMP 目標(biāo)地址(標(biāo)號(hào))功能:

無條件轉(zhuǎn)移到目的地址處執(zhí)行,即改變IP的值為目的

地址3、條件轉(zhuǎn)移指令格式:

JX 目的地址(標(biāo)號(hào))

根據(jù)單個(gè)標(biāo)志位轉(zhuǎn)移條件轉(zhuǎn)移指令指令條件JC和JNC進(jìn)位標(biāo)志JE/JZ和JNE/JNZ零標(biāo)志JS和JNS符號(hào)標(biāo)志JO和JNO溢出標(biāo)志JP/JPE和JNP/JNPE奇偶標(biāo)志條件轉(zhuǎn)移指令指令條件JA/JNBE大于JAE/JNB大于等于JB/JNAE小于JBE/JNA小于等于指令條件JG/JNLE大于JGE/JNL大于等于JL/JNGE小于JLE/JNG小于等于根據(jù)無符號(hào)數(shù)的大小轉(zhuǎn)移根據(jù)有符號(hào)數(shù)的大小轉(zhuǎn)移DATA SEGMENT XX DB -9 YY DB ?DATA ENDSCODE SEGMENT … MOV AL,XX CMP AL,0 JGE BIGR MOV AL,0FFH MOV YY,AL ;X<0 JMP EXITBIGR: LE EQUL MOV AL,1 MOV YY,AL ;X>0 JMP EXITEQUL: MOV YY,AL ;X=0EXIT: …CODE ENDS END START例6:符號(hào)函數(shù)(例3-19)DATA SEGMENT X DW 180 Y DW 850 Z DW 320 MAX DW ?DATA ENDSCODE SEGMENT … MOV AX,X CMP AX,Y JAE XAEY MOV AX,YXAEY: ;AX=max(X,Y) CMP AX,Z JAE XMAX MOV AX,ZXMAX: ;AX=max(X,Y,Z) MOV MAX,AXCODE ENDS END START例7-1:MAX=max(X,Y,Z)DATA SEGMENT X DB -5 Y DB 23 Z DB 7DATA ENDSCODE SEGMENT … MOV AL,X CMP AL,Y JL XLY XCHG AL,Y MOV X,ALXLY: CMP AL,Z JL CMYZ XCHG AL,Z XCHG AL,XCMYZ: MOV AL,Y CMP AL,Z JL EXIT XCHG AL,Z XCHG AL,YEXIT: …例7-2:X=min(X,Y,Z)Y=median(X,Y,Z)Z=max(X,Y,Z)DATA SEGMENT A DW a1,a2,…,a100 Y DD ?DATA ENDSCODE SEGMENT … MOV AX,0 MOV DX,0 ADD AX,A ADC DX,0 ADD AX,A+2 ADC DX,0 … ADD AX,A+198 ADC DX,0 MOV WORDPTRY,AX MOV WORDPTRY+2,DX …七、循環(huán)程序設(shè)計(jì)

CODE SEGMENT ASSUME CS:DATA,DS:DATASTART: …

MOV AX,0 MOV DX,0 MOV BX,OFFSETA MOV CX,100LOP:

ADD AX,[BX] ADC DX,0

ADD BX,2 DEC CX

JNZ LOP MOV WORDPTRY,AX MOV WORDPTRY+2,DX …初始化循環(huán)工作循環(huán)修改循環(huán)控制

CODE SEGMENT ASSUME CS:DATA,DS:DATASTART: …

MOV AX,0 MOV DX,0 MOV BX,OFFSETA MOV CX,100LOP:

ADD AX,[BX] ADC DX,0

ADD BX,2 LOOP LOP

MOV WORDPTRY,AX MOV WORDPTRY+2,DX …初始化循環(huán)工作循環(huán)修改循環(huán)控制

循環(huán)指令格式:

LOOP 目標(biāo)地址(標(biāo)號(hào))功能: DEC CX JNZ 目標(biāo)地址說明:

LOOP指令只能進(jìn)行短轉(zhuǎn)移,LOOP指令的地址和目的

地址之間相差必須在-128~+127之間。循環(huán)指令循環(huán)程序結(jié)構(gòu)先執(zhí)行,后判斷先判斷,后執(zhí)行DATA SEGMENT D1 DB -1,-13,6,9,-23,35,-5,123… COUNT EQU $-D1 RS DW ?DATA ENDSCODE SEGMENT … MOV BX,OFFSETD1 MOV CX,COUNT MOV DX,0LOP1: MOV AL,[BX] CMP AL,0 JGE GONEXT INC DXGONEXT: INC BX LOOP LOP MOV RS,DX …例9:RESULT=D1中的負(fù)數(shù)個(gè)數(shù)(例3-24)CODE SEGMENT … MOV CX,0LOP: AND AX,AX JZ STOP SAL AX,1 JNC NOD INC CXNOD: JMP LOPSTOP: …例10:CX=AX中1的個(gè)數(shù)(例3-25)DATA SEGMENT TEXT DB ‘ChangeLowercaseLetters’ DB ‘ToUppercaseLetters$’DATA ENDSCODE SEGMENT … MOV BX,OFFSETTEXTB20: MOV AL,[BX] CMP AL,‘$’ JE EXIT CMP AL,‘a(chǎn)’ JB B30 CMP AL,‘z’ JA B30 SUB AL,20H MOV [BX],ALB30: INC BX JMP B20EXIT: … 例11:小寫字母變大寫字母堆棧堆棧是一種數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),由棧頂和棧底構(gòu)成的,每次對(duì)數(shù)據(jù)的操作都是在棧頂進(jìn)行的;對(duì)堆棧數(shù)據(jù)的存取原則是“后進(jìn)先出”。入棧(PUSH)和出棧(POP)指令:PUSH srcSPSP-2[SP+1]&[SP]srcPOP destdest[SP+1]&[SP]SPSP+28086中當(dāng)前堆棧的棧頂由SS:SP指示入棧過程:PUSH AX

假設(shè):SS=9000H,SP=1000H,AX=55AAHSP-1SP:SP=0FFFH;將AHSS:SP中:[90FFFH]=55H;SP-1SP:SP=0FFEH;將ALSS:SP中:[90FFEH]=AAH。8086堆棧操作的過程出棧操作:POP BXSS:SP中的數(shù)據(jù)BL:BL=AAH;SP+1SP:SP=0FFFH;SS:SP中的數(shù)據(jù)BH:BH=55HSP+1SP。8086堆棧操作的過程八、子程序1、調(diào)用指令格式:

CALL 過程名或目的地址調(diào)用指令的分類段內(nèi)直接調(diào)用(NEAR)段間直接調(diào)用(FAR)段內(nèi)間接調(diào)用(NEAR)段間間接調(diào)用(FAR)調(diào)用過程斷點(diǎn)IP入棧,近調(diào)用時(shí)壓入偏移地址,遠(yuǎn)調(diào)用時(shí)壓入段地址和偏移地址;將目標(biāo)地址的偏移地址送入IP,遠(yuǎn)調(diào)用時(shí)還要將目標(biāo)地址的段地址送入CS;2、返回指令

格式:

RET [數(shù)]返回指令的分類近返回:遠(yuǎn)返回:帶彈出值返回

返回過程從棧頂彈出2個(gè)字節(jié)放入IP,如果是遠(yuǎn)返回還要彈出2個(gè)字節(jié)放入CS;如果是帶彈出值的返回,還要彈出數(shù)個(gè)字節(jié),亦即修改SP的值,SPSP+數(shù)。子程序 DATA SEGMENT DAT1 DB 02H,12H,35H,… DAT2 DB 36H,28H,67H,… RESULT DB 10DUP(?) DATA ENDS CODE SEGMENT … MOV BX,OFFSETDAT1 MOV SI,OFFSETDAT2 MOV DI,OFFSETRESULT MOV CX,10 LOP1: MOV AL,[BX]

CALL DTOB MOV DH,AH MOV AL,[SI]

CALL DTOB ADD AH,DH MOV [DI],AH INC BX INC SI INC DI LOOP LOP1例12:兩組各

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論