微机原理第04章4子程序
- 格式:ppt
- 大小:344.00 KB
- 文档页数:25
第四章汇编语言程序设计
符组成,如3+2、77 AND 55、NOT 5AH等。
1). 操作数
操作数用于代表一个数据或一个地址。
2). 运算符
运算符包括算术、逻辑、关系、分析、综合五类运算符(p136见表
①算术运算符包括 + 、-、*、/ 、MOD
参加运算的内容可以是数据,也可以是地址,但在一个算术运算符的两边不能都是地址。
MOV BX, DATA1 LT 0010H MOV BX, 0
红河学院工学院
汇编语言程序设计4.2.1 概述汇编语言程序设计与其它语言的程序设计一样,都要有良好的数据结构和算法,对每个要解决的问题要经过入下步骤:
逻辑运算指令例1:屏蔽AL寄存器的低四位。
第4章89C51汇编语言程序的设计与调试知识回顾汇编语言实用程序设计
1 查表程序设计:
根据自变量x,在表格中寻找y,使y=f(x)
查表指令:
¾MOVC A,@A+DPTR ;A←((A)+(DPTR))¾MOVC A,@A+PC ;A←((A)+(PC))
2 关键字查找程序设计
从50个字节的无序表中查找一个关键字××H
、图4-5所示的几种形式
和图4-7。
例4-11 求符号函数的值。
SIGNFUC: MOV A, 40H
CJNE A, #00H, NZEAR AJMP NEGT ;x =0,y =0
NZEAR: JB ACC.7, POSI ;x <0,y =-1
MOV A, #01H ;x>0,y =1AJMP NEGT
POSI: MOV A, #81H NEGT: MOV 41H, A RETURN: RET
END
y =
000011=<>⎪⎩
⎪
⎨⎧−+x x x
(A)=?
语句组1
语句组1语句组2
语句组2语句组3
语句组3语句组4
语句组40AH
0BH
0CH 入口
AAA
BBB
CCC
DDD
计数循环控制结构条件控制结构
最常见的多重循环是由DJNZ指令构成的软件延时程序,它是常用的程序之一。
延时程序。
89C51指令执行时间有很大的关系。
晶振时,一个机器周期为
指令的时间为2µs。
这时,可用双重循环方法写出下面如下的延时50ms的程序:。
华南理工大学微机原实验四:子程序设计一.实验目的1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图四、源程序代码DATA SEGMENTORG9999HMENU DB0DH,0AH,'Programed by Deng Tengfei Class Electronic Material Grade 09',0DH,0AH,;菜单DB'Please input1~5to choose service',0DH,0AH,DB'1:Convert a small letter to a big letter',0DH,0AH,DB'2:Seek the bigest number',0DH,0AH,DB'3:Put the character string in order',0DH,0AH,DB'4:Set time and check time',0DH,0AH,DB'5:End the program$'MEG0DB'Please choose function$';提示信息MEG0~MEG8MEG1DB'You have choose the function1.',0DH,0AH,'Please input the character string you want to convert:$'MEG2DB'You have choose the function2.',0DH,0AH,'Please input the character string:$'MEG3DB'You have choose the function3.',0DH,0AH,'Please input the character string you want to sort$'MEG4DB'You have choose the function4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'MEG5DB'The program is end$'MEG6DB'Sorry.you have chosen a undefined function.Please input a correct function number$' MEG7DB'Fail to set time$'MEG8DB'Press any key to do again or press the ESC key to return to the main menu$'FLAG DB-1;冒泡排序中使用的标志DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC NEAR;主程序MOV AX,DATAMOV DS,AXCIN:LEA DX,MENU;输出提示信息MOV AH,09HINT21HCALL ENT;输出回车换行LEA DX,MEG0MOV AH,09HINT21HCALL ENTMOV AH,01HINT21HCMP AL,30H;判断功能号JLE EORCMP AL,31HJE F1CMP AL,32HJE F2CMP AL,33HJE F3CMP AL,34HJE F4CMP AL,35HJE F5EOR:CALL ENTLEA DX,MEG6;输出出错信息MOV AH,09HINT21HJMP CINF1:CALL ENT;功能1LEA DX,MEG1MOV AH,09HINT21HCALL ENTCALL FUN1;调用子程序1MOV AH,01HINT21HCMP AL,1BHJNE F1JMP CINF2:CALL ENT;功能2LEA DX,MEG2MOV AH,09HINT21HCALL ENTCALL FUN2;调用子程序2MOV AH,01HINT21HCMP AL,1BHJNE F2JMP CINF3:CALL ENT;功能3LEA DX,MEG3MOV AH,09HINT21HCALL ENTCALL FUN3;调用子程序3MOV AH,01HINT21HCMP AL,1BHJNE F3JMP CINF4:CALL ENT;功能4LEA DX,MEG4MOV AH,09HINT21HCALL ENTCALL FUN4;调用子程序4MOV AH,01HINT21HCMP AL,1BHJNE F4JMP CINF5:MOV AH,4CH;功能5,终止程序INT21HFUN1PROC NEAR;子程序1PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AH;字符串输入INT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI];设定循环次数MOV CH,0JIK:INC SIMOV AL,[SI]CMP AL,0DH;判断字符ASCII码JE KLCMP AL,61HJB JKCMP AL,7AHJA JKSUB AL,20H;小写转大写JK:MOV DL,AL;输出字符MOV AH,02HINT21HLOOP JIKCALL ENTLEA DX,MEG8MOV AH,09HINT21HKL:POP SIPOP DXPOP CXPOP AXRETFUN1ENDPFUN2PROC NEAR;子程序2PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV CL,[SI]MOV CH,0INC SIMOV AL,[SI]FH:INC SI;循环比较CMP AL,[SI]JA FGMOV AL,[SI]FG:LOOP FHMOV DL,ALMOV AH,02HINT21HCALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP SIPOP DXPOP CXPOP AXRETFUN2ENDPFUN3PROC NEAR;子程序3PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,0AHINT21HCALL ENTMOV SI,DXINC SIMOV BL,[SI]MOV BH,0INC SIMOV DI,SILP1:CMP FLAG,0;根据标志判断JE LP3DEC BX;检查循环次数CMP BX,0JE LP3MOV CX,BXMOV SI,DIMOV FLAG,0LP2:MOV AL,[SI];前后比较CMP AL,[SI+1]JLE NEXTXCHG AL,[SI+1]MOV[SI],ALMOV FLAG,0FFHNEXT:INC SILOOP LP2;内循环继续JMP LP1;退出内循环LP3:DEC DI;重新设定循环次数MOV CL,[DI]MOV CH,0LP4:INC DI;循环输出字符MOV DL,[DI]MOV AH,02HINT21HLOOP LP4CALL ENTLEA DX,MEG8MOV AH,09HINT21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETFUN3ENDPFUN4PROC NEAR;子程序4PUSH AXPUSH BXPUSH CXPUSH DXCALL CROT;调用子程序CROTMOV CH,AL;装入入口参数MOV AH,01HINT21HCALL CROTMOV CL,ALMOV AH,01HINT21HCALL CROTMOV DH,ALMOV DL,0CALL ENTMOV AH,2DH;调DOS中断置时间INT21HCMP AL,0FFHJE FALPRT:PUSH DX;输出时间MOV AL,CHMOV AH,0MOV BL,0AHDIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HMOV AL,CLMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV DL,3AHINT21HPOP DXMOV AL,DHMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT21HMOV DL,DHINT21HMOV AH,2CH;调DOS中断取时间INT21HMOV AL,0AH;写入OCW3OUT20H,ALNOP;延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPIN AL,20H;读取IRRAND AL,02HJNE MKCALL COV;调子程序COVJMP PRTFAL:LEA DX,MEG7MOV AH,09HINT21HMK:CALL ENTMOV AH,01HINT21HLEA DX,MEG8MOV AH,09HINT21HPOP DXPOP CXPOP BXPOP AXRETFUN4ENDPCROT PROC NEAR;子程序CROT,完成ASCII码转换成两位十进制数PUSH BXPUSH CXPUSH DXMOV BL,0;初始化BL和BHMOV BH,0AHMOV DX,02H;设循环次数GET:MOV AH,01HINT21HSUB AL,30HCMP AL,0JB FALCMP AL,09HJA FALXCHG AL,BLMUL BHADD AL,BLXCHG AL,BLDEC DXCMP DX,0JNE GETMOV AL,BLPOP DXPOP CXPOP BXRET CROT ENDPCOV PROC;格式控制,使光标回到上个制表位PUSH AXPUSH CXPUSH DXMOV CX,08HMOV AH,02HMOV DL,08HREC:INT21HLOOP RECPOP DXPOP CXPOP AXRETCOV ENDPENT PROC;格式控制,输出回车换行MOV DL,0DHMOV AH,02HINT21HMOV DL,0AHMOV AH,02HINT21HRETENT ENDPMAIN ENDPCODE ENDSEND MAI五、程序调试及运行结果:主菜单1、功能一(小写字母转大写字母):2、功能二(找出ASCII码最大的字符):3、功能三(按ASCII码把字符从大到小排列):4、功能四(显示跳动的时间):5、功能五(退出程序):如果是错误的输入,提示如下:六、实验心得通过这个实验,基本掌握了子程序的调用方法,子程序可以单独设计,主程序做好了,可以嵌套具体功能的子程序实现需求,这个实验子程序可以分开调试,子程序决定具体功能,主程序是一个框架,这点有种化大为小的思想,告诉我们一个复杂功能的程序,可以分模块,按功能,一部分一部分地实现,最后嵌套,进行最后调试。