版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
匯編語言程序設(shè)計黃景濤河南科技大學(xué)電子信息工程學(xué)院Email:hjt.haust@Q&A:自動化教研室(西苑10-316);周四晚7:00~8:00.1可整理ppt匯編語言程序設(shè)計匯編語言源程序格式及其開發(fā)過程指令格式及尋址方式8086匯編語言的基本語法順序、分支、循環(huán)結(jié)構(gòu)程序設(shè)計子程序設(shè)計宏匯編簡介2可整理ppt匯編語言基本概念基本概念匯編語言:是一種面向機器的程序設(shè)計語言,它是機器語言的符號化描述。特點:代碼短、空間省、效率高匯編語言源程序:用匯編語言編寫的程序目標程序:匯編語言經(jīng)翻譯程序翻譯成的代碼程序(即機器語言的程序)。匯編程序:把源程序轉(zhuǎn)變?yōu)橄鄳?yīng)目標程序的翻譯程序3可整理ppt匯編語言基本概念宏匯編:不僅包含一般匯編語言的功能,而且采用了高級語言使用的數(shù)據(jù)結(jié)構(gòu),是一種接近高級語言的匯編語言。匯編語言程序的開發(fā)過程編寫源程序:EDIT(DOS),TextPad(Windows)將源程序保存為XXXX.asm文件使用MASM生成目標程序XXXX.OBJ使用LINK生成可執(zhí)行程序XXXX.EXE源程序XXXX.asm目標程序XXXX.obj可執(zhí)行程序XXXX.exe設(shè)計編輯用MASM匯編用LINK連接執(zhí)行4可整理ppt匯編語言基本概念匯編程序設(shè)計過程:分析問題;確定算法;編寫程序;檢驗程序;編寫說明文件。源程序的編輯、調(diào)試用文本編輯器進行源代碼的編寫,文件保存后綴為ASMC:***\masm>masm
example.asmC:***\masm>linkexample.objC:***\masm>example5可整理ppt匯編語言基本概念基本匯編語言程序?qū)嵗?1)DATA SEGMENT(2)String DB‘programASM’,’$’(3)DATA ENDS(4)CODE SEGMENT(5) ASSUMECS:CODE,DS:DATA,SS:STACK(6)START: MOVAX,DATA(7) MOVDS,AX(8) MOVDX,OFFSETString(9) MOVAH,9(10) INT21H(11) MOVAX,4C00H(12) INT21H(13)CODE ENDS(14)STACK SEGMENTSTACK(15) DB256DUP(?)(16)STACK ENDS(17) ENDSTARTAH=9功能:顯示字符串DS:DX=串地址字符串以“$”結(jié)尾AH=4C功能:帶返回碼終止AL=返回碼6可整理ppt匯編語言中的語句指令性語句源程序經(jīng)匯編后生成機器碼指示性語句匯編過程中不產(chǎn)生機器碼,在匯編過程中起解釋說明作用宏語句由宏匯編定義的宏引用語句7可整理ppt匯編語言中的語句指令性語句指令性語句格式[標號:][前綴]指令助記符[操作數(shù)][,操作數(shù)][;注釋]標號:代表“:”后面語句的存儲地址,供轉(zhuǎn)移指令(JMP)、轉(zhuǎn)子指令(CALL)、循環(huán)指令(LOOP)等使用。由字母、數(shù)字組成串(第一個字符非數(shù)字)前綴:是與串操作運算(MOVS、CMPS、SCAS、LODS、STOS)以及總線封鎖指令(LOCK)配合使用的部分。它們是REP、REPZ、REPE、REPNZ、REPNE等等。
LOOP1:REPMOVSDEST,SOURCE操作數(shù)的數(shù)目可以為0,1或2,用“,”隔開8可整理ppt數(shù)據(jù)傳送指令(14條)傳送MOV堆棧操作PUSH,POP交換XCHG輸入、輸出IN,OUT轉(zhuǎn)換XLAT地址傳送LEA,LDS,LES標志傳送PUSHF,POPF,LAHF,SAHF匯編語言中的語句9可整理ppt算術(shù)運算指令(20條)加法ADD,ADC,AAA,DAA加“1”INC減法SUB,SBB,AAS,DAS減“1”DEC比較CMP求補NEG乘法MUL,IMUL,AAM除法DIV,IDIV,AAD符號擴展CBW,CWD匯編語言中的語句10可整理ppt求反NOT邏輯與AND邏輯或OR異或XOR測試TEST左/右移位SHL,SHR,SAL,SAR左/右循環(huán)移位ROL,ROR,RCL,RCR-邏輯運算指令(13條)匯編語言中的語句11可整理ppt串操作指令(10條)傳送串MOVS,MOVSB/MOVSW串比較CMPS,CMPSB/CMPSW串掃描SCAS,SCASB/SCASW取字符串LODS,LODSB/LODSW存字符串STOS,STOSB/STOSW重復(fù)前綴REP,REPZ,REPNZ匯編語言中的語句12可整理ppt子程序調(diào)用CALL子程序返回RET無條件轉(zhuǎn)移JMP條件轉(zhuǎn)移JZ,JNZ,JC,JNC,JO,JNO,JS,JNS,JP,JNP,JA,JAE,JB,JBE,JG,JGE,JL,JLE循環(huán)LOOP條件循環(huán)LOOPNE,LOOPE寄存器CX=0轉(zhuǎn)移JCXZ中斷INT,INTO中斷返回IRET控制轉(zhuǎn)移指令(28條)匯編語言中的語句13可整理ppt處理器控制指令(12條)清除CF標志CLC進位有效位CF求反CMC置CF標志STC置DF標志STD清除DF標志CLD置IF標志STI清除IF標志CLI處理機暫停HLT等待狀態(tài)WAIT將數(shù)據(jù)傳送給協(xié)處理器(提供到數(shù)據(jù)/地址線上)ESC總線封鎖LOCK空操作NOP匯編語言中的語句14可整理ppt指示性語句功能:對程序的起止信息、分段情況、變量說明、內(nèi)存結(jié)構(gòu)等進行說明。格式:
[名字]偽操作指令[參數(shù),……,參數(shù)][;注釋]PC宏匯編的偽指令段定義偽指令:SEGMENT,ENDS,ASSUME,ORG等符號定義偽指令:EQU,=數(shù)據(jù)定義偽指令:DB,DW,DD,DQ,DT過程定義偽指令:PROC,ENDP宏處理偽指令:MACRO,REPT,IRPC條件匯編偽指令:IF,ENDIF,IFDIF,IFDEF匯編語言中的語句15可整理ppt每個語句由1~4個部分組成,其格式是:
[標號]指令助記符[操作數(shù)][;注釋]
標識符:給指令或某一存儲單元地址所起的名字??捎上铝凶址M成:
字母:A~z;數(shù)字:0~9;特殊字符:?、·、@、一、$。數(shù)字不能作標識符的第一個字符,而圓點僅能用作第一個字符;標識符最長為31個字符;當標識符后跟冒號時,表示是標號。它代表該行指令的起始地址;當標識符后不帶冒號時,表示變量;偽指令前的標識符不加冒號。指令助記符:表示不同操作的指令,可以是8086的指令助記符,也可以是偽指令。操作數(shù):
指令執(zhí)行的對象。依指令的要求,可能有一個、兩個或者沒有。注釋:該項可有可無,是為源程序所加的注解,用于提高程序的可讀性。匯編語言語句格式及組成16可整理ppt常量與數(shù)值表達式常量在匯編時已經(jīng)確定的值。在指令中作為直接操作數(shù),或者給變量賦初值類型數(shù)值常量:以數(shù)值的形式直接寫在語句中符號常量:預(yù)先為它定義一個名字,然后在語句中用名字來表示該常量(提高程序的可讀性)用EQU或=來定義例:PORTEQU83HALPHT=35*21匯編語言語句格式及組成17可整理ppt數(shù)據(jù)形式格式X取值范圍例子注釋二進制XXXXXXXXB0,101110101B八進制XXXXOXXXXQ0~70~7735O421Q十進制XXXXXXXXD0~90~937562358D缺省形式十六進制XXXXH0~F0FB23H最前面的一個字符必須是0~9ASCII‘XX’“XX”ASCII字符128個‘OK’“Pass”十進制實數(shù)XX.XXE±XX0~923.456E-7各種形式常量的格式匯編語言語句格式及組成18可整理ppt標號標號是為一組機器指令所起的名字,用于程序轉(zhuǎn)移指令、調(diào)用指令和循環(huán)指令的操作數(shù)(轉(zhuǎn)向地址),一般在CS段內(nèi)定義和使用。標號的屬性:段屬性、偏移屬性和類型標號所處的代碼段的段基址,稱為該標號的段屬性
標號所處的位指向?qū)τ诙问椎刂返南鄬Φ刂罚Q為該標號的偏移屬性形式一:標號形式二:OFFSET標號LC1:MOVAL,20H……JMPLC1MOVBX,OFFSETLB1匯編語言語句格式及組成19可整理ppt匯編語言語句格式及組成標號:標號有FAR(遠標號)和NEAR(近標號)兩種類型近標號:該標號的定義在本段;在機器指令助記符之前,加一標號名字,后面緊跟一個冒號“:”
LC1:MOVAL,20H……JMPLC1遠標號:該標號的定義在其它段;過程定義時,為過程起的名字也是標號,可作為轉(zhuǎn)子指令的操作數(shù),這類標號的類型在定義子過程時確定
PROPPROCFAR……
PROPENDP20可整理ppt注:標號在使用時注意事項(1)循環(huán)指令、條件轉(zhuǎn)移指令只能引用NEAR型,并且定義標號語句和使用標號語句的相對距離只能在–128~+127字節(jié)范圍內(nèi)(2)無條件轉(zhuǎn)移指令、調(diào)用(轉(zhuǎn)子)指令可引用NEAR和FAR兩種類型的標號(3)如果同一段內(nèi),無條件轉(zhuǎn)移指令語句到定義該標號語句的距離在–128~+127字節(jié)范圍內(nèi),則可在使用的標號前指定為短標號:記為SHORT標號匯編語言語句格式及組成21可整理ppt變量——變量的定義及格式變量是內(nèi)存中一個數(shù)據(jù)區(qū)的名字,可以作為指令的存儲器操作數(shù)來引用變量定義的格式:
[變量名]變量類型定義符表達式[,……]變量名:由用戶定義(符合標識符定義的規(guī)范)變量類型:DB:1個字節(jié) DW:2個字節(jié),即1個字DD:4個字節(jié),即2個字 DQ:8個字節(jié),即4個字DT:10個字節(jié),即5個字匯編語言語句格式及組成22可整理ppt表達式——操作數(shù)和運算符組成的式子算術(shù)運算符:+,-,*,/
邏輯運算符:NOT,AND,OR,XOR
關(guān)系運算符:
EQ----相等
NE----不相等
LT----小于
GT----大于
LE----小于或等于
GE----大于或等于匯編語言語句格式及組成23可整理ppt例:ARRAYDW1,2,3ADDSI,TYPEARRAY匯編的結(jié)果為ADDSI,2分析運算符——TYPE,LENGTH,SIZE,SEG,OFFSETTYPE
格式:
TYPE變量或標號
說明:
變量:則匯編程序?qū)⒒厮驮撟兞款愋桶淖止?jié)數(shù) 標號:則匯編程序?qū)⒒厮痛碓摌颂栴愋偷臄?shù)值。
NEAR(-1)、FAR(-2)匯編語言語句格式及組成24可整理ppt例:FEESDW100DUP(0)MOVCX,LENGTHFEES則匯編結(jié)果為:MOVCX,100例:ARRAYDW1,2MOVCX,LENGTHARRAY則匯編結(jié)果為:MOVCX,1LENGTH
格式:
LENGTH變量
說明: 回送分配給該變量的單元數(shù),表達式中帶DUP
時有效,非 DUP時,回送1匯編語言語句格式及組成例:ARRAYDW1,2,3MOVCX,SIZEARRAY則匯編結(jié)果為:MOVCX,2SIZE
格式:SIZE變量
說明:回送分配給該變量的字節(jié)數(shù),此值是LENGTH值和TYPE值的乘積25可整理ppt例:MOVBX,OFFSETOPR則匯編程序?qū)PR的偏移地址回送給指令,在執(zhí)行時,將該偏移地址裝入BX寄存器中OFFSET
格式:OFFSET變量或標號
說明:回送該變量或標號的偏移地址值匯編語言語句格式及組成例:MOVBX,SEGOPR 則匯編程序?qū)PR所在的段基址送入BX寄存器SEG
格式:SEG變量或標號
說明:回送該變量或標號的段地址26可整理ppt匯編語言語句格式及組成屬性操作符——PTR,THIS
I.PTR
格式:類型PTR表達式類型:BYTE,WORD,DWORD,FAR,NEAR表達式:是存儲器操作數(shù)
說明:用來給已分配的存儲地址賦予另一種屬性,使該地址具有另一種類型例:MOV[BX],5MOVBYTEPTR[BX],5MOVWORDPTR[BX],5例: VARW DW 2030H,4080H;VARW由DW定義為字類型 …… MOV AL,BYTEPTRVARW;該指令由PTR改變VARW屬性27可整理ppt匯編語言語句格式及組成THIS——指定屬性操作符格式:THIS類型(BYTE,WORD,DWORD,FAR,NEAR)功能:用于指定存儲器操作數(shù)或地址的類型屬性。說明:該操作符對應(yīng)的語句放在數(shù)據(jù)變量定義偽指令或標號定義之前;規(guī)定一個新變量(標號)的屬性;由THIS定義的新變量(標號)的段地址和偏移地址與緊跟其后定義的變量(標號)的段地址和偏移地址相同,即指向同一個存儲單元,但數(shù)據(jù)類型可以不同一般通過EQU偽指令為符號命名賦予一個由THIS指定的類型例: FIRST_BYTE EQU THIS BYTE WORD_TABLE DW 3275H,08ABH例: TAB EQU THIS FAR
MOV AX,1234H;
定義標號TAB,屬性為FAR,指向MOVAX,1234H28可整理ppt指示性語句(說明性語句)存儲分配(數(shù)據(jù)定義)語句數(shù)值表達式如3*20?–保留存儲空間但不存入數(shù)據(jù)例:ABCDB0,?,?,0DEFDW?,52存儲空間分配如圖所示ASCII字符串例:MESSAGEDB‘HELLO’存儲空間分配如圖所示00----00----3400……………………ABCDEF48454C4C4F……………………MESSAGE偽指令29可整理ppt
NDUP(?)–重復(fù)因子n為正整數(shù),表示數(shù)據(jù)項重復(fù)n次例:ARRAY1DB2DUP(0,1,2,?)ARRAY2DB100DUP(?)
內(nèi)存分配如圖所示
NDUP(表達式[表達式,……])例:ARRAY3DB100DUP(0,2DUP(1,2),0,3)000102--000102----………………ARRAY1ARRAY2--……100個字節(jié)匯編語言語句格式及組成30可整理ppt定義數(shù)據(jù)偽指令DATA1 DB 20HDATA2 DW 0240H,1000HDATA3 DB (-1*3),(15/5)DATA4 DD 12345HDATA5 DB '0123'DATA6 DW 'AB','C','D'DATA7 DB ?DATA8 DD ?DATA9 DB 5DUP(00)DATA10 DW 3DUP(?)31可整理ppt偽指令EQU——符號定義偽指令格式: 符號 EQU 表達式或 新符號 EQU 舊符號EQU偽指令給符號定義一個值。在程序中,凡是出現(xiàn)該符號的地方,匯編時均用其值代替,如: COUNT EQU 100 ;COUNT代替常數(shù)100 CONST EQU COUNT SUM EQU 30*25 ;SUM代替數(shù)值表達式 C EQU CX ;C代替寄存器CX M EQU MOV ;M代替指令助記符MOV注意!一個符號一經(jīng)EQU偽指令賦值后,在整個程序中,不允許再對同一符號重新賦值。如果要定義由EQU定義過的變量,則需使用PURGE解除對該變量的定義。格式為:PURGE符號32可整理ppt匯編語言程序設(shè)計段定義偽指令段定義偽指令的用途是在匯編語言程序中定義邏輯段;指定段的名稱和范圍,并指明段的定位類型、組合類型及類別;段定義偽指令為SEGMENT和ENDS。格式:
段名SEGMENT[定位類型][組合類型][類別]
……(段內(nèi)語句系列) 段名ENDS33可整理ppt偽指令DATA1SEGMENT┇DATA1ENDSSTACK1SEGMENTSTACK┇STACK1ENDSCODE1SEGMENT
ASSUMECS:CODE1,DS:DATA1,SS:STACK1
MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AX┇CODE1ENDS段定義偽指令例子:34可整理ppt匯編語言程序設(shè)計——偽指令設(shè)定段寄存器偽指令通知匯編程序哪一個段寄存器是該段的段寄存器,以便對使用變量或標號的指令匯編出正確的目的代碼。段定義偽指令為ASSUME。格式:ASSUME段寄存器:段名[,段寄存器:段名,……]注意!由于ASSUME偽指令只指明某一個段地址應(yīng)存于哪一個段寄存器中,并沒有包含將段地址送入該寄存器的操作。要將真實段地址裝入段寄存器還需用匯編指令來實現(xiàn),這一步是不可缺少的。
35可整理ppt匯編語言程序設(shè)計——偽指令定義過程偽指令在程序設(shè)計中,可將具有一定功能的程序段看成為一個過程(相當于一個子程序),它可以被別的程序調(diào)用。一個過程由偽指令PROC和ENDP來定義。格式:
過程名PROC[類型] 過程體 RET 過程名ENDP
其中過程名是為過程所起的名稱,不能省略;過程的類型由FAR(遠過程,為段間調(diào)用)和NEAR(近過程,在本段內(nèi)調(diào)用)來確定,如果缺省類型,則該過程就默認為近過程;ENDP表示過程結(jié)束;過程體內(nèi)至少應(yīng)有一條RET指令,以便返回被調(diào)用處;過程可以嵌套,也可以遞歸使用。36可整理ppt匯編語言程序設(shè)計——偽指令過程定義偽指令舉例:DELAY
PROC
MOV BL,10DELY: MOV CX,2801WAIT: LOOP WAIT DEC BL JNZ DELY RET DELAY
ENDP
37可整理ppt匯編語言程序設(shè)計——偽指令宏指令在匯編語言書寫的源程序中,若有的程序段要多次使用,為了簡化程序書寫,該程序段可以用一條宏指令來代替;匯編程序匯編到該宏指令時,仍會產(chǎn)生源程序所需的代碼。
格式:
宏指令名 MACRO[形式參量表] 宏體 ENDM
例如:
SHIFT MACRO MOVCL,4 SALAL,Cl ENDM38可整理ppt匯編語言程序設(shè)計——偽指令ORG偽指令ORG偽指令規(guī)定了在某一段內(nèi),程序或數(shù)據(jù)代碼存放的起始偏移地址。格式:
ORG<表達式>例如:
DATA SEGMENT BUFF1 DB 23,56H,‘EOF’
ORG 2000H BUFF2 DB ‘STRING’ DATA ENDS39可整理ppt匯編語言程序設(shè)計——偽指令匯編結(jié)束偽指令END該偽指令表示源程序的結(jié)束;通知匯編程序停止匯編;任何一個完整的源程序均應(yīng)有END指令。格式:END[表達式]其中表達式表示該匯編程序的啟動地址。例如:
ENDSTART;表明該程序的啟動地址為START。40可整理ppt匯編語言程序設(shè)計過程匯編語言程序設(shè)計概述41可整理ppt匯編語言程序設(shè)計順序程序設(shè)計對于一些簡單的數(shù)據(jù)處理,只要把完成處理的各個步驟用匯編語言描述清楚,讓計算機按指令編寫的次序從頭到尾一條條執(zhí)行即可,這樣的程序結(jié)構(gòu)稱為順序結(jié)構(gòu)。
42可整理ppt順序程序設(shè)計DATA SEGMENT
X DB15 Y DB34 Z DW? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX ;初始化數(shù)據(jù)段 MOV AL,X ;X中的內(nèi)容送AL MUL AL ;計算X×X MOV BX,AX ;X×X乘積送BX MOV AL,Y ;Y中的內(nèi)容送AL MUL AL ;計算Y×Y ADD AX,BX ;計算X2+Y2 SHR AX,1 ;計算(X2+Y2)/2 MOV Z,AX ;結(jié)果送Z單元 MOV AH,4CH INT 21H ;返回DOSCODE ENDS
END START ;匯編結(jié)束【例】已知X和Y是數(shù)據(jù)段中的兩個無符號字節(jié)單元,用程序完成表達式Z=(X2+Y2)/2的計算。43可整理pptCODE SEGMENT ASSUME CS:CODEMAIN: MOV AH,1 INT 21H ;讀第1個數(shù)字 MOV BL,AL ;保存在BL中 MOV AH,2 MOV DL,13 INT 21H ;回車 MOV DL,10 INT 21H ;換行 MOV AH,1 INT 21H ;讀入第2個數(shù)字 SUB AL,30H ;第2個數(shù)字轉(zhuǎn)換成十進制數(shù) SUB BL,30H ;第1個數(shù)字轉(zhuǎn)換成十進制數(shù) MUL BL ;兩個數(shù)相乘,積在AX中 MOV BL,10 ; DIV BL ;積除以10商送AL,余數(shù)在AH ADD AX,3030H ;轉(zhuǎn)換成相應(yīng)的ASCⅡ碼MOV BX,AX ;保存在BX中MOV AH,2 MOV DL,13 INT 21H ;回車MOV DL,10 INT 21H ;換行MOV DL,BL MOV AH,2 INT 21H ;輸出十位數(shù)MOV DL,BH INT 21H ;輸出個位數(shù)MOV AH,4CH INT 21H ;返回DOSCODE ENDS END MAIN ;程序結(jié)束例:從鍵盤讀入兩個1位數(shù),計算其成績并將結(jié)果顯示在屏幕上。44可整理ppt分支程序設(shè)計選擇程序是利用條件轉(zhuǎn)移指令,使程序執(zhí)行到某一指令后,根據(jù)條件是否滿足,來改變程序執(zhí)行的次序。在程序設(shè)計中經(jīng)常會遇到各種判斷和比較,例如“相等”和“不相等”;“正”和“負”;“大于”和“小于”;“滿足條件”和“不滿足條件”等等,這些判斷和比較在程序中都可以組成各種不同的邏輯框,并產(chǎn)生相應(yīng)的分支程序。45可整理ppt分支程序設(shè)計
【例】符號函數(shù)設(shè)任意給定的X存放在XX單元,計算出函數(shù)Y值要求存放在YY單元。
46可整理ppt分支程序設(shè)計DATA SEGMENT XX DB 0F0HYY DB ?DATA ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATASTART PROC FAR PUSH DSSUB AX,AX PUSH AXMOV AX,DATA MOV DS,AX
MOV AL,XX CMP AL,0 JGE BIGR MOV AL,0FFH MOV YY,AL RET BIGR: JE EQUL MOV AL,1EQUL: MOV YY,AL RET START ENDP CODE ENDS END START47可整理ppt循環(huán)程序設(shè)計循環(huán)程序是強制CPU重復(fù)執(zhí)行某一指令系列的一種程序結(jié)構(gòu)形式;可以使許多重復(fù)工作的程序大為簡化,而且減少內(nèi)存空間;被重復(fù)執(zhí)行的部分稱作循環(huán)體,要想把循環(huán)體多次執(zhí)行,就必須在循環(huán)體的前后有相應(yīng)的指令實現(xiàn)循環(huán)控制;循環(huán)程序一般由4部分組成:初始化、循環(huán)體、循環(huán)控制和循環(huán)結(jié)束處理。48可整理ppt循環(huán)程序設(shè)計示例【例】現(xiàn)將以AREA1為首地址的100個字節(jié)數(shù)據(jù)搬移到以AREA2為首地址的內(nèi)存中去。DATA SEGMENT AREA1 DB 100DUP(?)AREA2 DB 100DUP(00)DATA ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSETAREA1 MOV DI,OFFSETAREA2 MOV CX,100AGAIN:MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ AGAIN MOV AH,4CH INT 21HCODE ENDS END START49可整理ppt循環(huán)程序設(shè)計示例【例】若有一串無符號數(shù),放在NUM開始的單元中,要求編制匯編語言程序,將其中的最大值找出來,且放到存儲單元MAX中,這串數(shù)的長度已存放在COUNT單元。DATA SEGMENT COUNT DW 20NUM DW7,9,12,14,1,3,28,55,121,44,15,45,34,67,87,90,32,43,59,60MAX DW ?DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DB 20DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV BX,OFFSETNUM MOV CX,COUNT MOV AX,[BX] INC BX INC BXLOOP1: CMP AX,[BX] JAE LOOP2 MOV AX,[BX]LOOP2: INC BX INC BX DEC CX JNZ LOOP1 MOV [MAX],AX RET MAIN ENDP CODE ENDS END MAIN50可整理ppt循環(huán)程序設(shè)計示例【例】設(shè)計一個100ms的軟件延時程序。采用多重循環(huán)程序,內(nèi)循環(huán)完成10ms的延時,外層循環(huán)10次即可。CODE SENGMET ASSUME CS:CODESTART: MOV DL,10DELAY1: MOV CX,2800HDELAY2: LOOP DELAY2 DEC DL JNZ DELAY1 MOV AH,4CH INT 21HCODE ENDS END START51可整理ppt子程序設(shè)計格式子程序名 PROC[類型] 指令序列子程序名 ENDP調(diào)用子程序調(diào)用與子程序返回由CALL和RET指令實現(xiàn);子程序調(diào)用方式有近程調(diào)用、遠程調(diào)用、直接調(diào)用和間接調(diào)用。52可整理ppt子程序設(shè)計保護現(xiàn)場和恢復(fù)現(xiàn)場利用指令PUSH保護現(xiàn)場,利用指令POP恢復(fù)現(xiàn)場。例如:
SUB1 PROCNEAR PUSHAX保護現(xiàn)場 PUSHBX PUSHCX PUSHDX┇┇ POPDX恢復(fù)現(xiàn)場 POPCX POPBX POPAX RETSUB1 ENDP53可整理ppt子程序設(shè)計——參數(shù)傳遞方法利用寄存器利用存儲單元利用堆棧54可整理ppt子程序(過程)設(shè)計示例【例】編制程序兩個6字節(jié)數(shù)相加。將一個字節(jié)相加的程序段設(shè)計為子程序。主程序分3次調(diào)用該子程序,但每次調(diào)用的參數(shù)不同。DATA SEGMENTMYADD1 DB0FEH,86H,7CH,35H,68H,77HMYADD2 DB45H,0BCH,7DH,6AH,87H,90HSUM DB6DUP(0)COUNT DB6DATA ENDSSTACK SEGMENT DB100DUP(?)STACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKMADD: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SI,OFFSETMYADD1 MOV DI,OFFSETMYADD2 MOV BX,OFFSETSUM MOV CX,COUNT;循環(huán)初值為6 CLCAGAIN: CALL SUBADD;調(diào)用子程序 LOOPAGAIN;循環(huán)調(diào)用6次 MOV AX,4C00H INT 21H;子程序入口參數(shù):SI,DI,BX出口參數(shù):SI,DI,BXSUBADD PROC;完成一個字節(jié)相加 PUSH AX;保護AX的值 MOV AL,[SI];SI是一個源操作數(shù)指針 ADC AL,[DI];DI是另一個源操作數(shù)指針 MOV [BX],AL;BX是結(jié)果操作數(shù)指針 INC SI INC DI INC BX POP AX;恢復(fù)AX的值
RETSUBADD ENDPCODE ENDS ENDMADD55可整理pptDOS系統(tǒng)功能調(diào)用調(diào)用過程為:DOS功能調(diào)用號送AH寄存器;如果需要,按要求給定輸入?yún)?shù)(有的不需要輸入?yún)?shù));執(zhí)行中斷調(diào)用指令I(lǐng)NT21H。
調(diào)用結(jié)束,按功能使用其輸出參數(shù)。56可整理pptDOS系統(tǒng)功能調(diào)用1、單字符輸入-1號功能調(diào)用 功能:從鍵盤輸入1個字符 輸入?yún)?shù):無 輸出參數(shù):AL=輸入字符的ASCII碼例:從鍵盤輸入10個數(shù)字,并將其存放在DS:0100H開始的單元內(nèi)。 …… MOV DI,0100H MOV CX,10NEXT: MOV AH,1 INT 21H SUB AL,30H MOV [DI],AL INC DI LOOP NEXT ……57可整理pptDOS系統(tǒng)功能調(diào)用2、單字符輸出-2號功能調(diào)用功能:在屏幕上顯示1個字符(ASCII碼)輸入?yún)?shù):DL=要輸出字符的ASCII碼輸出參數(shù):無例:從鍵盤輸入兩個1位十進制數(shù),求兩數(shù)之和并在屏幕上顯示結(jié)果。
MOV AH,1 ;DOS調(diào)用輸入第一個數(shù) INT 21H MOV BL,AL ;保存輸入的第一個數(shù) MOV AH,1 INT 21H ADD AL,BL ;兩個ASCII碼相加 AAA ;調(diào)整加法結(jié)果為非壓縮BCD數(shù) MOV DL,AL ADD DL,30H ;加法結(jié)果轉(zhuǎn)換成ASCII碼 MOV AH,2 ;DOS調(diào)用輸出到屏幕 INT 21H58可整理pptDOS系統(tǒng)功能調(diào)用
3、字符串輸出-9號功能調(diào)用功能:多個字符輸出到屏幕顯示,字符串必須以”$”結(jié)束輸入?yún)?shù):DS:DX=輸出字符緩沖區(qū)首地址輸出參數(shù):無例:在屏幕上顯示一串字符DATA SEGMENTBUFF DB‘Howdoyoudo?’,0DH,0AH,’$’DATA ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODESTART: MOVAX,DATA MOVDS,AX
LEADX,BUFF MOVAH,9 INT21H ……59可整理pptDOS系統(tǒng)功能調(diào)用4、直接控制臺輸入輸出(單字符輸入/輸出)-6號功能6號DOS功能實際上是1號和2號功能的組合;當DL寄存器的內(nèi)容為0FFH時,6號功能與1號功能同,即從鍵盤輸入單個字符;而當DL寄存器中放入字符的ASCII值,它就是2號功能。用法:MOV AH,6MOV DL,XXINT 21H60可整理pptDOS系統(tǒng)功能調(diào)用5、過程終止-4CH號該調(diào)用的功能是結(jié)束當前程序,并返回調(diào)用它的程序,如在DEBUG狀態(tài)下運行,則返回DEBUG;如果在DOS下運行,則返回DOS。在匯編語言程序結(jié)束處放上MOVAX,4C00H和INT21H兩條指令,以利于程序執(zhí)行完畢,返回操作系統(tǒng)控制。用法:MOVAX,4C00HINT21H61可整理pptDOS系統(tǒng)功能調(diào)用6、字符串輸入——0AH號調(diào)用
功能:字符串輸入,直到回車鍵為止
調(diào)用: DS:DX指向緩沖區(qū)首地址
MOV AH,0AH
INT 21H說明:該功能完成從鍵盤接收字符串存到指定區(qū)域,直到按下回車鍵;緩沖區(qū)第一個字節(jié)為指定緩沖區(qū)的長度,第二個字節(jié)保留供DOS系統(tǒng)填入實際輸入的字符個數(shù),從第三個字節(jié)開始依次存放輸入的字符若實際輸入字符個數(shù)少于定義的字節(jié)數(shù),則多余字節(jié)填0若實際輸入字符個數(shù)多余定義的字節(jié)數(shù),則多余字符丟棄。62可整理ppt宏匯編簡介宏:源程序中一段有獨立功能的程序代碼。宏指令:用戶自定義的指令。在編程時,將多次使用的功能用一條宏指令來代替。匯編語言程序指令偽指令(偽操作)宏指令63可整理ppt宏定義與宏調(diào)用1、宏定義宏指令名MACRO<形式參量表>……ENDM2、宏調(diào)用 宏指令名<實參表>64可整理ppt宏展開:匯編程序把宏調(diào)用展開宏定義體復(fù)制到宏指令位置,實參代虛參LOCAL中的標號??0000~??ffff宏定義:
macro_name
MACRO
[形參表]
;形參/虛參
[LOCAL標號表]……;宏定義體
ENDM宏調(diào)用:
(必須先定義后調(diào)用)
macro_name[實參表];實參宏定義與宏調(diào)用65可整理ppt宏定義與宏調(diào)用例:MULTY MACROOPR1,OPR2,RESULT ;宏定義 PUSHAX MOVAL,OPR1 MOVAH,OPR2 IMULOPR2 MOVRESULT,AX POPAX
ENDM ……DATA SEGMENTXX DB12YY DB34ZZ DW? ……
MULTYXX,YY,ZZ
;宏調(diào)用,實參替代虛參 ……66可整理ppt優(yōu):模塊化省內(nèi)存缺:開銷大宏定義:Qmacrox,y…endm主程序:…Qa,b…Qc,d…Qe,f…目標程序:………………優(yōu):參數(shù)傳送簡單,執(zhí)行效率高缺:占用內(nèi)存空間大主程序:…CALL----…CALL----…CALL----…子程序:………RET子程序的調(diào)用宏的定義與調(diào)用67可整理ppt符號1&符號2
宏展開時,合并前后兩個符號形成一個符號。;;注釋
宏展開時,;;后面的注釋不予展開。
%表達式
匯編程序?qū)?后面的表達式轉(zhuǎn)換為數(shù)字,并在展開期間用這個數(shù)取代形參。宏匯編操作符:&;;%68可整理ppt重復(fù)偽操作REPTREPT
表達式……;重復(fù)塊ENDM重復(fù)匯編用于連續(xù)產(chǎn)生完全相同或基本相同的一組代碼。不定重復(fù)偽操作IRP/IRPCIRP形參,<自變量表>
……;重復(fù)塊ENDMIRPC
形參,字符串
……;重復(fù)塊ENDM69可整理ppt例:把字符‘A’到‘Z’的ASCII碼填入數(shù)組TABLECHAR=‘A’TABLELABELBYTE
REPT
26DBCHARCHAR=CHAR+1
ENDM1DB41H1DB42H1DB43H……1DB5AH匯編后:70可整理ppt條件匯編根據(jù)條件把一段源程序包括在匯編語言程序內(nèi)或者排除在外。IF
自變量
;為條件……;自變量滿足條件則匯編此塊[ELSE]……;自變量不滿足條件則匯編此塊ENDIF一般格式:71可整理pptIF表達式;表達式≠0,則匯編IFE表達式;表達式=0,則匯編IF1;在第一遍掃視期間滿足條件IF2;在第二遍掃視期間滿足條件IFDEF符號;符號已定義,則匯編IFNDEF符號;符號未定義,則匯編IFB<自變量>;自變量為空,則匯編IFNB<自變量>;自變量不為空,則匯編IFIDN<字符串1>,<字符串2>;串1與串2相同IFDIF<字符串1>,<字符串2>;串1與串2不同IFXX具
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省蘇州市昆山市2025-2026學(xué)年高一上學(xué)期期末語文試卷(無答案)
- 2025-2026學(xué)年統(tǒng)編版二年級語文下冊第四單元達標訓(xùn)練卷(A)(含答案)
- 2024-2025學(xué)年湖南省衡陽市船山實驗中學(xué)九年級(上)期末道德與法治試卷(含答案)
- 飛行技術(shù)答辯
- 2026內(nèi)蒙古鄂爾多斯準格爾旗民族小學(xué)招聘考試備考題庫及答案解析
- 2026陜西西安新城區(qū)同德巷社區(qū)招聘公益性崗位工作人員3人備考考試題庫及答案解析
- 市場調(diào)查公司數(shù)據(jù)管理制度
- 2026年甘肅省蘭州大學(xué)第二醫(yī)院西固醫(yī)院水暖工招聘備考考試試題及答案解析
- 新人視頻活動策劃方案(3篇)
- 僑鄉(xiāng)書香活動策劃方案(3篇)
- 2026內(nèi)蒙古鄂爾多斯市伊金霍洛旗九泰熱力有限責(zé)任公司招聘熱電分公司專業(yè)技術(shù)人員16人筆試模擬試題及答案解析
- 馬年猜猜樂(猜地名)打印版
- 河南豫能控股股份有限公司及所管企業(yè)2026屆校園招聘127人筆試模擬試題及答案解析
- 2025年浙江省嘉興市嘉善縣保安員考試真題附答案解析
- 要謙虛不要驕傲課件
- 2026國家保安員資格考試題庫及參考答案【完整版】
- 微生物檢驗質(zhì)控措施分析
- 2026年黑龍江農(nóng)業(yè)工程職業(yè)學(xué)院單招職業(yè)技能考試題庫及參考答案詳解1套
- 婦科腫瘤保留生育功能治療策略
- 宮頸癌病理課件
- 2025東航股份綜合管理部招聘筆試歷年參考題庫附帶答案詳解
評論
0/150
提交評論