预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共71页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章汇编语言程序设计汇编语言简介汇编伪指令二、定义字节伪指令[标号:]DBX1、X2…Xn三、字定义伪指令[标号:]DWY1、Y2…Yn四、EQU赋值伪指令字符名称EQU项〔数或汇编符号)五、DS定义存贮空间伪指令DS表达式六、DATA数据地址赋值伪指令字符名称DATA表达式七、BIT定义位地址符号伪指令字符名称BIT位地址汇编语言程序设计程序设计要求及基本方法经汇编后,从地址1000H处存贮器的内容为:子程序嵌套(或称多重转子)是指在子程序执行过程中,还可以调用另一个子程序。例1:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。MAIN:MOVA,#0FEH;[标号:]DWY1、Y2…YnMOVR1,B另一种是先循环控制后循环处理〔即先判断后处理),如图4-3〔b〕所示。上机调试DEL1:NOP例如:延时程序常以DELAY作为标号。七、BIT定义位地址符号伪指令字符名称BIT位地址……3.28h纪录最小值所在单元的编号MOV22H,A题意分析示意图ORG0200HMOVA,30HADDA,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDCA,41HMOV41H,A;第二字节加法并送结果MOVA,32HADDCA,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A;第四字节加法并送结果,进位位在CY中SJMP$END分支程序单分支双分支多分支例:如下图,设计一段程序实现功能:假设〔A〕中1的个数为奇数,所有的二极管发光;如果全0,则只让VD0-VD3发光;否则全灭。开场双分支程序设计例:内部RAM的40H单元和50H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果用发光二极管显示〔LED为低有效):假设(40H)≥(50H),则P1.0管脚连接的LED1发光;假设(40H)<(50H),则P1.1管脚连接的LED2发光。题意分析:本例是典型的分支程序,根据两个无符号数的比较结果〔判断条件),分别点亮相应的发光二极管。比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则X≥Y;若CY=1,有借位,则X<Y。程序的流程图如下图所示。两数比较流程图源程序如下:XDATA40H;数据地址赋值伪指令DATAYDATA50HORG1000HMOVA,X;(X)→ACLRC;CY=0SUBBA,Y;带借位减法,A-(Y)-CY→AJCL1;CY=1,转移到L1CLRP1.0;CY=0,(40H)≥(50H),点亮P1.0连接的LED1SJMPFIN;直接跳转到结束等待L1:CLRP1.1;(40H)<(50H),点亮P1.1接的LED2FIN:SJMP$END多分支程序举例流程图程序清单循环程序设计③.循环控制循环控制程序也在循环体内,常常由修改循环计数器内容的语句和条件转移语句等组成,用于控制循环执行次数。初始化例1:设计一段程序实现功能:统计〔A〕中1的个数,把结果存入30H单元中。例:将内部RAM单元中20H单元到2FH单元的数传到外部RAM中的2000H到200FH单元中.源程序:ORG1000HMOVR0,#20HMOVDPTR,#2000HMOVR2,#10HLOOP:MOVA,R0MOVXDPTR,AINCR0INCDPTRDJNZR2,LOOPSJMP$END查表程序设计解:由于每个存储单元中放有两个十六进制数,因此每个存储单元中十六进制数应分别转换成ASCII码。这就需要两次使用查表指令MOVCA,A+PC,这两条查表指令在程序中位置是不相同的,故两次对PC调整的值也不相同。在编程时,可以先把整个程序编完,然后再计算两条加法指令中的data修正值并填入相应位置。ADDA,#17;第一次地址调整MOVCA,A+PC;第一次查表MOVR1,A;存第一次转换结果MOVA,R0;重新取出被转换数SWAPA;高4位调入低4位ANLA,#0FH;取出低4位ADDA,#09;第二次地址调整MOVCA,A+PC;第二次查表INCR1;修改目的数据块指针MOVR1,A;存第二次转换结果INCR0;修改源数据块指针INCR1;修改目的数据块指针DJNZLEN,LOOP;若未转换完,则转LOOPSJMP$ASCTAB:DB‘0’,’1’,’2’,’3’,’4’DB‘5’,’6’,’7’,’8’,’9’DB‘A’,’B’,’C’,’D’,’E’,’F’END子程序设计在实际问题中,常常会遇到在一个程序中多次用到相同的运算或操作,若每遇到这些运算或操作,都从头编起,将使程序繁琐、浪费内存。因此在实际中,经常把这种多次使用的程序段,按一定结构编好,存放在存储器中,当需要时,可以调用这些独立的程序段。子程序设计例如:如果某一