微机原理与接口技术教学课件电子教案.ppt

上传人:春哥&#****71; 文档编号:25346333 上传时间:2022-07-11 格式:PPT 页数:70 大小:949KB
返回 下载 相关 举报
微机原理与接口技术教学课件电子教案.ppt_第1页
第1页 / 共70页
微机原理与接口技术教学课件电子教案.ppt_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《微机原理与接口技术教学课件电子教案.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术教学课件电子教案.ppt(70页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第4章微机原理与接口技术概述概述 操作得到的文件 操作使用的工具 说明:编辑编辑程序程序连接连接程序程序汇编汇编程序程序文件文件 XXX.ASM XXX.ASMLINKASMMASMTASM记事本WPSWORDEDIT文件文件 XXX.OBJXXX.OBJ XXX.LST XXX.CRF文件文件 XXX.EXEXXX.EXE XXX.MAP XXX.LIBDEBUG出错出错出错出错.OBJ:目标文件,.LST:列表文件,.CRF:交叉引用文件.MAP:映像文件,LIB:库文件DATASEGMENTSTRING DBHELLO WORLD!, 0DH, 0AH, $DATAENDSCODESEG

2、MENTASSUMECS:CODE, DS:DATABEGIN:MOVAX, DATAMOVDS, AX;初始化数据段的段地址MOVAH, 09HLEADX, STRING;输出字符串INT21HMOVAH, 4CHINT21H;调用4CH号系统功能返回DOSCODEENDSENDBEGIN 1、汇编语言程序是由若干个段组成,段由若干条语句组成。、汇编语言程序是由若干个段组成,段由若干条语句组成。3、程序以、程序以END结束。结束。语句是汇编语言程序的基本组成单位。汇编语言有语句是汇编语言程序的基本组成单位。汇编语言有3种基本种基本语句类型:语句类型:指令语句、伪指令语句和宏指令语句指令语句、

3、伪指令语句和宏指令语句。指令语句指令语句由由CPU执行执行,可产生机器代码可产生机器代码,CPU根据这些代码才能执行相根据这些代码才能执行相应的操作。应的操作。伪指令语句伪指令语句由编译器处理由编译器处理,为编译和连接提供控制信息为编译和连接提供控制信息,不产生机器代码。不产生机器代码。宏指令语句宏指令语句以一个宏名定义的一段指令序列以一个宏名定义的一段指令序列,在汇编中凡是出现宏指令在汇编中凡是出现宏指令语句的地方语句的地方,都会有相应的指令语句序列的目标代码插入。都会有相应的指令语句序列的目标代码插入。指令语句指令语句 标号标号: 指令助记符指令助记符 操作数操作数,操作数操作数 ;注释注

4、释例如: mov cx,8 ;2操作数指令 s: nop ;0操作数指令(nop空操作) loop s ;1操作数指令伪指令语句伪指令语句 名字名字 伪指令助记符伪指令助记符 参数参数,参数参数 ;注释注释例如: data1 db 0,1,2 ;数据定义伪指令DB,在内存中定义 ;3个连续的字节单元,初值是0,1,2 ;data1表示第一个数据0的偏移地址汇编语言程序的语句中包含的元素汇编语言程序的语句中包含的元素 :l字符集字符集l保留字与标识符保留字与标识符l常量、变量与标号常量、变量与标号l表达式及运算符表达式及运算符允许使用的字符:允许使用的字符:l字母,包括大写字母字母,包括大写字母

5、AZAZ和小写字母和小写字母azaz;l数字,包括数字,包括0909;l特殊字符,包括:特殊字符,包括:+ - + - * * / = / =()() ; , , “ “ . . :? $ & ? $ & 及空格、制表符、回车、换行等。及空格、制表符、回车、换行等。注意:注意:l除了字符串,字母都是不区分大小写除了字符串,字母都是不区分大小写l一系列相连的空格、制表符效果相当于一个空格一系列相连的空格、制表符效果相当于一个空格l一系列相连的回车换行相当于一次回车换行一系列相连的回车换行相当于一次回车换行l分号分号“;”后一直到行尾的内容都是注释后一直到行尾的内容都是注释l字符字符“&”&”若用

6、于某行的开头,则表示该行是上一行的续行若用于某行的开头,则表示该行是上一行的续行1 1、保留字、保留字在汇编语言中有特定意义的词,可分为:在汇编语言中有特定意义的词,可分为:指令助记符及指令前缀指令助记符及指令前缀如:如:MOVMOV、ADDADD、REPREP等等寄存器名寄存器名如:如:AXAX、EBXEBX、CLCL等等伪指令助记符伪指令助记符如:如: DB DB、SEGMENTSEGMENT等等其他保留字,包括运算符、操作符等其他保留字,包括运算符、操作符等如:如: EQEQ、LTLT、OFFSETOFFSET、SEGSEG等等标识符是程序员自己起的名字,如变量名、标号、段名、过程标识符

7、是程序员自己起的名字,如变量名、标号、段名、过程名等名等 标识符的命名规则:标识符的命名规则:l标识符必须由字母、数字和几个特殊字符(包括标识符必须由字母、数字和几个特殊字符(包括 _ $ ? :_ $ ? :)组成,而且第一个字符不能是数字(否则可能与组成,而且第一个字符不能是数字(否则可能与1616进制的数字进制的数字混淆)混淆)l标识符不能与某个保留字相同,以免混淆。标识符不能与某个保留字相同,以免混淆。l尽量用有意义的英文单词或缩写来命名,以增加程序的可读性尽量用有意义的英文单词或缩写来命名,以增加程序的可读性1 1、常量、常量数字常量数字常量l二进制:以二进制:以B B结尾,如结尾,

8、如10101010B10101010Bl八进制:以八进制:以Q Q结尾,如结尾,如123Q123Q,67Q67Ql十进制:以十进制:以D D结尾,结尾,“D”D”可省略,如可省略,如1234D1234D,56785678l十六进制:以十六进制:以H H结尾,结尾,AFAF开头的数须在前面加开头的数须在前面加“0”0” 如:如:1234H1234H,0FFFFH0FFFFH字符串常量字符串常量l用单引号或双引号引起来的一个或多个用单引号或双引号引起来的一个或多个ASCIIASCII字符字符l每个字符的值等于其每个字符的值等于其ASCIIASCII码值码值l例:例:A=41HA=41H一个字节,一

9、个字节,12=31H12=31H、32H32H两个字节两个字节变量是存放在存储器中的操作数变量是存放在存储器中的操作数 可通过变量的名字来访问变量可通过变量的名字来访问变量变量具有三个属性:变量具有三个属性:l段属性段属性,即变量所在的段的基地址;,即变量所在的段的基地址;l偏移量属性偏移量属性,即变量相对于段的起始地址的偏移量;,即变量相对于段的起始地址的偏移量;l类型属性类型属性,包括,包括BYTEBYTE(字节)、(字节)、WORDWORD(字)、(字)、DWORDDWORD(双字)(双字)FWORDFWORD(6 6字节)、字节)、QWORDQWORD(四字)、(四字)、TBYTETB

10、YTE(1010字节)等。字节)等。标号是一条指令性语句的起始地址标号是一条指令性语句的起始地址变量具有三个属性:变量具有三个属性:l段属性段属性,即变量所在的段的基地址;,即变量所在的段的基地址;l偏移量属性偏移量属性,即变量相对于段的起始地址的偏移量;,即变量相对于段的起始地址的偏移量;l类型属性类型属性,包括,包括NEARNEAR(近程,即段内)、(近程,即段内)、FARFAR(远程,(远程,即段间)即段间)由常量、变量、标号和一些运算符、操作符构成的式子由常量、变量、标号和一些运算符、操作符构成的式子表达式的值在汇编的过程中就已经被汇编程序计算出来表达式的值在汇编的过程中就已经被汇编程

11、序计算出来运算符的分类:运算符的分类:l算术运算符算术运算符l逻辑运算符逻辑运算符l关系运算符关系运算符l属性运算符属性运算符l数值返回操作符数值返回操作符五种算术运算:五种算术运算:加:加:+ +、 减:减:- -、 乘:乘:* *、 除:除:/ /、 模:模:MODMODl合法地址表达式:地址合法地址表达式:地址- -地址(处在同个段中);地址地址(处在同个段中);地址常数常数ADDR1-ADDR2ADDR1-ADDR2(假设两个地址处在同个段中)(假设两个地址处在同个段中)ADDR1+1ADDR1+1ADDR2-2ADDR2-2l非法地址表达式:地址非法地址表达式:地址+ +地址;地址地

12、址;地址* *地址;地址地址;地址/ /地址;常量地址;常量- -地址;地址地址;地址- -地址(处在不同段中)地址(处在不同段中)ADDR1+ADDR2ADDR1+ADDR2ADDR1ADDR1* *ADDR2ADDR2ADDR1/2ADDR1/2100-ADDR1100-ADDR1SEG1_A-SEG2_B SEG1_A-SEG2_B (假设两个地址处在不同段中)(假设两个地址处在不同段中)五种算术运算:五种算术运算:与与ANDAND、或、或OROR、异或、异或XORXOR、非、非NOTNOT、逻辑左移、逻辑左移SHLSHL、逻辑右移、逻辑右移SHRSHR 只用于数字表达式中只用于数字表达

13、式中例:例:MOV ALMOV AL,10101010B AND 11001100B 10101010B AND 11001100B ;AL10001000BAL10001000BMOV ALMOV AL,10001000B OR 01000100B 10001000B OR 01000100B ;AL11001100BAL11001100BMOV AXMOV AX,1000100010001000B XOR 1100110011001100B1000100010001000B XOR 1100110011001100B;AX0100010001000100BAX010001000100010

14、0BMOV AXMOV AX,NOT 1010101010101010BNOT 1010101010101010B;AX0101010101010101BAX0101010101010101B六种关系运算符:六种关系运算符:lEQEQ(EqualEqual,相等),相等)lNENE(Not EqualNot Equal,不等),不等)lLTLT(Less ThanLess Than,小于),小于)lLELE(Less than or EqualLess than or Equal,小于或等于),小于或等于)lGTGT(Great ThanGreat Than,大于),大于)lGEGE(Grea

15、t than or EqualGreat than or Equal,大于或等于),大于或等于)运算结果:运算结果:l关系为真,则运算结果为关系为真,则运算结果为0FFFFH0FFFFHl关系为假,则运算结果为关系为假,则运算结果为0 0 (1)型重新指定操作符PTR功能:临时指定或修改存储器操作数的数据类型属性或地址类型属性格式:类型 PTR 表达式例:VAR_W DW1234HMOV AX,VAR_W ;AX1234HMOV AL,BYTE PTR VAR_W ;AL34H功能:功能:指定或说明变量或标号的类型指定或说明变量或标号的类型例例1 1:DATA_W EQU THIS WORDD

16、ATA_W EQU THIS WORDDATA_B DBDATA_B DB1 1,2 2,3 3,4 4MOVMOVALAL,DATA_B DATA_B ;AL1AL1MOVMOVAXAX,WORD PTR DATA_B WORD PTR DATA_B ;AL0201HAL0201HMOVMOVAXAX,DATA_W DATA_W ;AL0201HAL0201H例例2 2:ADDR_F EQU ADDR_F EQU THIS FARTHIS FARADDR_N: MOV AXADDR_N: MOV AX,1 1 JMP ADDR_F JMP ADDR_F ;等价于:;等价于:JMP JMP F

17、AR PTR FAR PTR ADDR_N ADDR_N (1 1)SEGSEG、OFFSETOFFSET功能:功能:lSEGSEG操作符用于求一个标号或变量所在段的基地址操作符用于求一个标号或变量所在段的基地址lOFFSETOFFSET操作符则用于求标号或变量在段中的地址偏移量操作符则用于求标号或变量在段中的地址偏移量例如,对于代码段中的一条指令:例如,对于代码段中的一条指令:2000H:1234H ADDR: INC CX 2000H:1234H ADDR: INC CX ;段地址;段地址=2000H=2000H 偏移量偏移量=1234H=1234H则有:则有:MOV AXMOV AX,S

18、EG ADDR SEG ADDR ;AX2000HAX2000HMOV AXMOV AX,OFFSET ADDR OFFSET ADDR ;AX1234HAX1234H;与指令;与指令 “ “LEA LEA AX AX,ADDR” ADDR” 等价等价功能:功能:lTYPETYPE:求变量的数值类型属性,即变量具有的字节数:求变量的数值类型属性,即变量具有的字节数BYTEBYTE:返回:返回1 1;WORDWORD:返回:返回2 2;DWORD DWORD :返回:返回4 4;FWORD FWORD :返回:返回6 6;QWORD QWORD :返回:返回8 8,TBYTE TBYTE :返回

19、:返回1010;NEARNEAR:返回:返回0FFH0FFH;FARFAR:返回:返回0FEH0FEHlLENGTHLENGTH:求变量所占用的内存单元数:求变量所占用的内存单元数用于由重复操作符用于由重复操作符DUPDUP()定义的存储器变量()定义的存储器变量对于其他变量,对于其他变量,LENGTHLENGTH的返回值都是的返回值都是1 1lSIZESIZE:计算变量所占存储器的总字节数:计算变量所占存储器的总字节数 l关系:关系:SIZE = LENGTH SIZE = LENGTH TYPE TYPE例:DATA1 DW 1234HDATA2 DB HELLODATA3 DD 100

20、DUP(0);表示定义100个值为0的双字MOV AL,TYPEDATA1;AL2MOV AL,TYPEDATA2;AL1MOV AL,TYPEDATA3;AL4MOV BL,LENGTH DATA1;BL1MOV BL,LENGTH DATA2;BL1MOV BL,LENGTH DATA3;BL100MOV CL,SIZEDATA1;CL21=2MOV CL,SIZEDATA2;CL11=1MOV CL,SIZEDATA3;CL4100=400功能:lHIGH:分离一个字常量或一个地址表达式的高字节 lLOW:分离一个字常量或一个地址表达式的低字节例:l只能用于常量或结果为常量的表达式只能用

21、于常量或结果为常量的表达式ADDR1:MOV AL,HIGH 1234H;AL12HMOV AL,LOW ADDR1;AL上一指令 ;地址偏移量的低8位l不能用于变量或寄存器MOV BL,HIGH AX表达式计算顺序:表达式计算顺序:l先处理优先级别高的运算符先处理优先级别高的运算符l对于优先级相等的运算符,则按从左至右的顺序进行处理对于优先级相等的运算符,则按从左至右的顺序进行处理优先级顺序:优先级顺序:l()、()、(优先级最高)(优先级最高)lLENGTHLENGTH、SIZESIZElPTRPTR、THISTHIS、SEGSEG、OFFSETOFFSET、TYPETYPElHIGHHI

22、GH、LOWLOWl* *、/ /、MODMOD、SHLSHL、SHRSHRl+ +、- -lEQEQ、NENE、LTLT、LELE、GTGT、GEGElNOTNOTlANDANDlOROR、XORXORlSHORTSHORT(优先级最低)(优先级最低)一、伪指令(指示性语句)一、伪指令(指示性语句)格式(格式( 里的内容可选):里的内容可选): 名字名字 伪指令符伪指令符 操作数,操作数,操作数,操作数, ;注释;注释 l名字:变量名、段名等,与指令地址无关,后面不能加冒号名字:变量名、段名等,与指令地址无关,后面不能加冒号l伪指令符:指定汇编程序要完成的具体操作伪指令符:指定汇编程序要完成

23、的具体操作l操作数:常量、变量或表达式等操作数:常量、变量或表达式等l注释:说明、解释当前语句的作用注释:说明、解释当前语句的作用常用伪指令:常用伪指令:l处理器选择伪指令处理器选择伪指令l数据定义伪指令,包括数据定义伪指令,包括DBDB、DWDW、DDDD、DFDF、DQDQ、DTDTl符号定义伪指令,包括符号定义伪指令,包括EQUEQU、“=”=”l段定义伪指令段定义伪指令SEGMENTSEGMENT、ENDSENDSl假定伪指令假定伪指令ASSUMEASSUMEl地址对准伪指令地址对准伪指令ORGORGl过程定义伪指令过程定义伪指令PROCPROC、ENDPENDPl源程序结束伪指令源程

24、序结束伪指令ENDEND功能:功能:为变量分配存储空间为变量分配存储空间格式:格式: 变量名变量名 伪指令符伪指令符 操作数,操作数,操作数,操作数, ;注释;注释 六种数据定义伪指令:六种数据定义伪指令:lDBDB(字节定义):每个操作数占(字节定义):每个操作数占1 1个字节个字节lDWDW(字定义):每个操作数占(字定义):每个操作数占1 1个字,即个字,即2 2个字节个字节lDDDD(双字定义):每个操作数的长度为双字,即(双字定义):每个操作数的长度为双字,即4 4个字节个字节lDFDF(6 6字节定义):每个操作数的长度为字节定义):每个操作数的长度为6 6个字节个字节lDQDQ(

25、四字定义):每个操作数的长度为四字,即(四字定义):每个操作数的长度为四字,即8 8个字节个字节lDTDT(1010字节定义):每个操作数的长度为字节定义):每个操作数的长度为1010个字节个字节例:例:l可同时定义多个数据:可同时定义多个数据:NUM DW 12HNUM DW 12H,-1 -1 ;定义;定义2 2个字个字STRING DB HELLOSTRING DB HELLO,0DH0DH,0AH0AH;定义字符串;定义字符串l省略变量名:省略变量名:BUF DB 1BUF DB 1,1010,100100 DB 1 DB 1 ;省略变量名;省略变量名 ;但该数据仍可通过;但该数据仍可

26、通过“BUF+3”BUF+3”访问访问l无初始化数据定义:用问号无初始化数据定义:用问号“?”?”代替操作数代替操作数BUFFER DB 2BUFFER DB 2,? ?,? ?,? ? ;定义;定义4 4个字节个字节 ;其中后;其中后3 3个字节不初始化个字节不初始化lDUPDUP操作符:操作符:格式:格式:重复的次数重复的次数 DUPDUP(重复的内容)(重复的内容)例:例:ARRAYARRAYDBDB3 DUP3 DUP(1 1,2 2);等价于:;等价于:ARRAY DB 1ARRAY DB 1,2 2,1 1,2 2,1 1,2 2BUF_WBUF_WDWDW100 DUP100 D

27、UP(? ?);定义;定义100100个字,但不初始化个字,但不初始化DUPDUP的嵌套使用:的嵌套使用:ARRAY2ARRAY2DBDB2 DUP2 DUP(1 1,3 DUP3 DUP(0 0) ;等价于:;等价于:ARRAY2 DB 1ARRAY2 DB 1,0 0,0 0,0 0,1 1,0 0,0 0,0 0l地址表达式作为操作数:地址表达式作为操作数:只能用只能用DWDW、DDDD定义定义DWDW:变量:变量/ /标号的偏移量标号的偏移量DDDD:变量:变量/ /标号的段地址和偏移量标号的段地址和偏移量例:例:DATA1DATA1 DW DWADDR1+1ADDR1+1;把;把AD

28、DR1ADDR1偏移量加偏移量加1 1后存放到后存放到DATA1DATA1对应的存储单元中对应的存储单元中DATA2DATA2 DD DDDATA1DATA1;把;把DATA1DATA1的偏移量和段地址存放到的偏移量和段地址存放到DATA2DATA2对应的存储单对应的存储单 元中,其中偏移量放低地址,段地址放高地址。元中,其中偏移量放低地址,段地址放高地址。l地址计数器地址计数器“$”$”“$”$”:表示到目前为止该段已经使用的地址空间:表示到目前为止该段已经使用的地址空间例例1 1:设设VAR1VAR1地址偏移量为地址偏移量为1000H1000H,则:,则:VAR1VAR1DBDB100H

29、DUP 100H DUP (? ?)之后,之后,$=1100H$=1100H,因此:,因此:ADDR1ADDR1DWDW$ $等价于等价于“ADDR1 DW 1100H”ADDR1 DW 1100H”,也等价于,也等价于“ADDR1 DW ADDR1”ADDR1 DW ADDR1”例例2 2:STRING DB ABCSTRING DB ABCLENLEN DW $-STRING DW $-STRING ;LENLEN的值为的值为STRINGSTRING的长度的长度 数据段中首个变量的偏移量默认为数据段中首个变量的偏移量默认为0.0.例如:DATA SEGMENT A DB 0,?,3 B D

30、W 100,1200H,-5 C DB A, XY D DW XY E DW 3,4466H,2DUP(1,0) DW 1123H,0015H F DW C DATA ENDS (1 1)等价伪指令)等价伪指令EQUEQU格式:格式:符号名符号名 EQU EQU 表达式表达式功能:功能:为常量、表达式及其他各种符号定义一个别名为常量、表达式及其他各种符号定义一个别名例:例:NUMNUMEQU 12EQU 12;给数值定义符号名;给数值定义符号名NUM2NUM2EQU NUM+10EQU NUM+10;给;给12+10=2212+10=22定义符号名定义符号名ADDRADDREQU DS:BX+

31、SI EQU DS:BX+SI ;给寻址表达式定义符号名;给寻址表达式定义符号名COUNTCOUNTEQU CXEQU CX;给寄存器;给寄存器CXCX定义符号名定义符号名CLEARCLEAREQU XOR AXEQU XOR AX,AXAX;给指令定义符号名;给指令定义符号名(2 2)解除伪指令)解除伪指令PURGEPURGE格式:格式:PURGEPURGE 符号名,符号名,符号名,符号名,作用:作用:EQUEQU伪指令不能直接对一个符号名重定义,必须先用伪指令不能直接对一个符号名重定义,必须先用PURGEPURGE解除解除例:例:COUNTCOUNTEQU EQU CXCXPURGE PU

32、RGE COUNTCOUNTCOUNTCOUNTEQUEQUCLCL(3 3)等号)等号“=”=”伪指令伪指令格式:格式:符号名符号名 = =表达式表达式功能:功能:为常量、表达式及其他各种符号定义一个等价的符号名为常量、表达式及其他各种符号定义一个等价的符号名 允许对符号名多次重复定义,且以最后一次定义的值为准允许对符号名多次重复定义,且以最后一次定义的值为准 例:例:CONSTCONST= 1= 1;给数值;给数值1 1定义符号名定义符号名CONSTCONSTADDRADDR= BP+DI= BP+DI;给寻址表达式定义符号名;给寻址表达式定义符号名ADDRADDRCONSTCONST=

33、0= 0;重定义;重定义CONSTCONST格式:格式: 段名段名 segment segment 定位定位组合组合段字段字类别类别 . . 段名段名 endsends 格式:格式:ASSUMEASSUME段寄存器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名,功能:功能:告诉汇编程序段与段寄存器的对应关系告诉汇编程序段与段寄存器的对应关系例:例:DATADATASEGMENTSEGMENTVAR1VAR1DBDB? ? DATADATAENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUME CSCS:CODECODE,DSDS:DATADATABEGIN

34、BEGIN:ASSUMEASSUME指令:假定指令:假定CSCS为代码段,为代码段,DSDS为数据段为数据段伪指令assume cs:code,ds:data,ss:stack只是将cs、ds、ss和code、data、stack相连,并没有给cs、ds、ss赋相应的段地址CSCS的装入的装入源程序结束定义伪指令:END 标号 每个源程序都必须以END伪指令结束 例如:start: end start end后面的标号start说明了程序的入口,cpu的cs:ip将被设置指向这个入口。DSDS与与ESES的装入的装入 用ASSUME将DS/ES与相应的段建立联系 用数据传送指令mov装入段地址

35、 MOVAX,段名 MOVDS/ES,AXSSSS的装入的装入( (两种办法两种办法) )第种:在定义段时,用组合类型STACK说明STACK1SEGMENT PARA STACKDW 20H DUP(0)STACK1ENDSCODESEGEMNTASSUME CS:CODE,SS:STACK1第(2)种:SS的装入(类似于DS/ES的方法)STACK1 SEGMENT DW 40H DUP(0)TOP LABEL WORDSTACK1 ENDSCODESEGEMNTASSUME CS:CODE,SS:STACK1MOV AX,STACK1MOV SS,AXMOV SP,OFFSET TOP;

36、SP=80H(1 1)ORGORG格式:ORG数值表达式功能:用于指定下一个指令或数据在段内的起始地址例:LAB1:PUSHAXORG2000HLAB2:MOVAL,34则LAB2的地址偏移量为2000H。功能:功能:定义一个过程定义一个过程格式:格式:过程名过程名PROCPROC 过程属性过程属性 返回指令返回指令RET RET 过程名过程名ENDPENDP过程属性:过程属性:lNEARNEAR:缺省属性,表示段内调用:缺省属性,表示段内调用/ /返回返回lFARFAR:表示段间调用:表示段间调用/ /返回返回 顺序程序是指程序的结构从开始到结尾一直是顺序执行,中途没有分支。顺序程序的流程图

37、如图4-4所示。例例4-10 4-10 试编写程序计试编写程序计算表达式算表达式Z=(3X+Y-5)/2Z=(3X+Y-5)/2,设设X X、Y Y的值放在字变量的值放在字变量VARXVARX、VARYVARY中,结果存中,结果存放在放在VARZVARZ中。中。算法分析:乘2n和除2n可以使用算术左移和右移实现;其它非2n的乘除运算可以用移位和加减组合运算来实现,如3X可以分解成2X+X。算法实现:DATA SEGMENTVARX DW 5VARY DW 10VARZ DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,D

38、ATA MOV DS,AX MOV AX,VARX SHL AX,1 ;2*X ADD AX,VARX ;3*X ADD AX,VARY ;3X+Y SUB AX,5 ;3*X+Y-5 SAR AX,1 ;(3*X+Y-5)/2 MOV VARZ,AX ;存结果 MOV AH,4CH INT 21HCODE ENDS END START 分支程序结构是指程序的执行顺序将根据某些指令的执行结果,选择某些指令执行或不执行。分支程序的实现主要是由转移指令完成。如图4-5所示,分支程序结构有两种形式:一种是二分支结构;另一种是多分支结构。(1)(1)用比较用比较/ /测试指令测试指令+ +条件转移指令

39、实现分支条件转移指令实现分支算法实现:算法实现:DATA SEGMENTARY DB 18,15,40,0,60,10,30,70MAX DB ?DATA ENDSSTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;SI指向ARY的第一个元素 MOV CX,7 ;CX作次数计数器 MOV AL,SI ;取第一个元素到ALLOP: INC SI ;SI指向后一个元素 CMP AL,SI ;比较两个数 JAE BIGER ;前元素后元素转移 MOV AL,SI ;取较大数到ALBIGER:DEC CX ;减1计数 JNZ LOP ;未比较完转回去,否则顺

40、序执行 MOV MAX,AL ;存最大数 MOV AH,4CH INT 21HCODE ENDS END START在实际工作中,有时需要对某一问题进行多次重复处理,该类计算过程具有循环特征,循环程序设计恰是解决这类问题行之有效的方法。循环程序的构成循环程序的构成循环程序一般主要包括以下四个部分:循环程序一般主要包括以下四个部分:初始化部分主要用于建立循环的初始状态,即循环次数计数器、地址指针以及其他循环参数的初始设定。循环体循环体是程序中重复执行的程序段,包括工作部分和修改部分。工作部分是完成循环程序任务的主要程序段;修改部分则是为循环的重复执行,完成某些参数的修改。循环控制部分主要判断循环

41、条件是否成立。判断方法主要有两种:用计数控制循环和用条件控制循环。结束处理部分处理循环结束后的结果,如存储结果等。(2)循环程序的结构类型依照问题的不同,循环体的结构一般可分为两类:先执行后判断和先判断后执行,如图4-8所示。控制循环次数的方法用计数控制循环用计数控制循环适用于循环次数已知的,或是在进入循环前可由某变量确定循环次数的情况。常选用CX作计数器,可选用LOOP、LOOPE或LOOPNE等循环控制指令。例4-13 把以BUFFER为首址的6个字节单元中的二进制数据累加,求得的和存放到RES字单元中。用条件控制循环用条件控制循环适用于某些循环次数未知的,或循环次数可变的情况,可以由问题

42、给出的条件控制循环结束。例4-14 调用单字符输出的DOS功能,向屏幕输出以“#”结束的字符串。a.明确任务,确定算法。 设字符串存放在以D1开始的存储区中,字符串以“#”结束。虽然字符串长度未知,但可利用条件中的已知特征“#”来结束循环。显然,可以用条件控制法。b.算法思想:初始化:将D1的首地址送入SI。循环: (a)将SI指向的存储单元数据送到DL中; (b)判断:如果DL中的字符不是“#”,则显示 该字符,并修改SI的值即让SI指向下一个存储 单元,然后返回(a);否则执行(c)。 (c)结束。c.编写程序DATA SEGMENTD1 DB HOW ARE YOU?#DATA ENDS

43、CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,D1 LP: MOV DL,SI CMP DL,# JZ ENDOUT MOV AH,2 ;显示单个字符 INT 21H INC SI ;指向下一个数据 JMP LPENDOUT:INT 20HCODE ENDS END START 子程序或过程是汇编语言中多次使用的一个相对独立的程序段。子程序的定义子程序的定义 每一个子程序在被使用前必须先定义,子程序的定义格式就是过程的定义格式,完成子程序功能的程序段就包括在过程定义语句PROC。ENDP的中间。(2

44、)(2)子程序的调用和返回子程序的调用和返回 主程序通过使用CALLCALL指令实现对子程序的调用,子程序通过使用RETRET指令实现返回主程序。如果在子程序中没有保护与恢复现场,则应该在主程序调用子程序之前保护现场、在子程序返回主程序后恢复现场。例4-16已知数组由50个字数据组成,试求出该数组元素之和。 算法分析:假设数组已经存放在以ARY开始的存储区中,其各个元素之和存放在以SUM开始的存储区中。用子程序结构进行编程。DATA SEGMENTARY DW 50 DUP(?)SUM DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:

45、 MOV AX,DATA MOV DS,AX CALL RADD MOV AH,4CH INT 21H求和子程序RADD PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX LEA BX,ARY MOV CX,100 MOV AX,0 MOV DX,AXCL1: ADD AX,BX JNC CL2 INC DXCL2: ADD BX,2 LOOP CL1 MOV SUM,AX MOV SUM+2, DX POP DX POP CX POP BX POP AX RETRADD ENDPCODE ENDS END START DOS是磁盘操作系统,它为程序设计人员提

46、供了可以直接调用的功能子程序。 DOS功能调用就是指对这些子程序的调用,也称系统功能调用。子程序的顺序编号称为功能调用号。 IBM PC系列机在只读存储器ROM中固化有一组外部设备驱动与管理软件,占用系统板上8K字节的ROM区,组成PC机基本输入输出系统(Basic I/O System),它处于系统软件的最低层,又称ROM BIOS。BIOS/DOS的每个功能子程序都对应着一个子程序文件,因此BIOS/DOS功能子程序调用步骤如下: 子程序入口参数送规定寄存器;子程序入口参数送规定寄存器; 子程序编号子程序编号( (功能调用号功能调用号) )送送AHAH寄存器寄存器 发软中断命令:发软中断命

47、令:INT nINT n使用时需要注意,有的软中断号n对应一个子程序,调用时无需步骤;DOS功能调用在更高层次上提供了与BIOS类同的功能,两者的区别主要体现在:调用BIOS中断程序比调用DOS的复杂一些,但运行速度快、功能更强;DOS功能调用只适用于DOS环境,而BIOS功能调用不受任何操作系统的约束;某些功能只有BIOS具有。(1)带显示的键盘输入(1号功能)说明:调用该功能子程序将等待键盘输入,直到按下一个键。将字符的ASCII码送入AL寄存器,并在屏幕上显示该字符。如果是Ctrl-C组合键,则停止程序运行。该功能调用无入口参数。例如:MOV AH,01H INT 21H (2)不带显示

48、的键盘输入(8号功能)说明:该功能调用与1号功能的作用相似,区别是8号功能将不显示输入的字符。例如:MOV AH,08H INT 21H(3)不带显示的键盘字符输入(7号功能)说明:该功能与8号功能相似,但对Ctrl-C组合键和TAB制表键无反应。例如:MOV AH,07H INT 21H(4)字符串输入(0AH号功能)该功能调用可实现从键盘输入一个字符串,其长度可达255个字符。调用该功能前,应在内存中建立一个输入缓冲区。缓冲区第一个字节指出可输入的最大字符数;第二个字节是系统在调用该功能时,自动填入的本次调用时实际输入的字符个数;从第三个字节开始存放输入字符的ASCII码。当用户输入回车键

49、时,结束输入,并将回车键的ASCII码(0DH)作为最后一个字符送入缓冲区。但它不计入实际输入字符个数。 调用入口参数:调用入口参数: DSDS和和DXDX寄存器分别装入输入缓冲区的段寄存器分别装入输入缓冲区的段基值和偏移量。基值和偏移量。例如:char_buf DB 60H ;缓冲区的最大长度 DB 0 ;存实际输入字符数 DB 60H DUP(0);输入缓冲区 . MOV DX,SEG char_buf;如果DS已经指向char_buf所在 MOV DS,DX ;数据段,则可以省去这两条指令 MOV DX,OFFSET char_buf MOV AH,0AH INT 21H(5)字符显示(

50、2号功能)说明:该功能实现在屏幕上显示单个字符。入口参数:DL中存放待显示字符的ASCII码。例如:MOV DL ,A;待显示的字符A MOV AH,2 INT 21H(6)字符打印(5号功能)说明:该功能将字符送入打印机接口,实现单个字符的打印操作。入口参数:DL中存放待打印字符的ASCII码。例如:MOV DL,A MOV AH,5 INT 21H(7)字符串显示(9号功能)说明:该功能实现将一个字符串显示到屏幕上。入口参数:将待显示的字符串存放在一个数据缓冲区,字符串以符号“$”作为结束标志。将字符串的首址的段基值和偏移量分别送入DS和DX中。例如: char DB This is a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com