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

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

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

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

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

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

第4章汇编语言程序设计汇编语言简介汇编伪指令二、定义字节伪指令 [标号:]DBX1、X2…Xn 三、字定义伪指令 [标号:]DWY1、Y2…Yn四、EQU赋值伪指令字符名称EQU项(数或汇编符号)五、DS定义存贮空间伪指令DS表达式六、DATA数据地址赋值伪指令字符名称DATA表达式七、BIT定义位地址符号伪指令字符名称BIT位地址汇编语言程序设计程序设计要求及基本方法一、顺序程序题意分析示意图ORG 0200H MOV A,30H ADD A,40H MOV 40H,A ;最低字节加法并送结果 MOV A,31H ADDC A,41H MOV 41H,A ;第二字节加法并送结果 MOV A,32H ADDCA,42H MOV 42H,A ;第三字节加法并送结果 MOV A,33H ADDC A,43H MOV 43H,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;数据地址赋值伪指令DATA YDATA50H ORG 1000H MOV A,X ;(X)→A CLR C ;CY=0 SUBB A,Y ;带借位减法,A-(Y)-CY→A JCL1 ;CY=1,转移到L1 CLR P1.0 ;CY=0,(40H)≥(50H),点亮P1.0连接的LED1 SJMPFIN;直接跳转到结束等待 L1:CLRP1.1 ;(40H)<(50H),点亮P1.1接的LED2 FIN:SJMP$ END 多分支程序举例流程图程序清单循环程序设计③.循环控制 循环控制程序也在循环体内,常常由修改循环计数器内容的语句和条件转移语句等组成,用于控制循环执行次数。初始化例1:设计一段程序实现功能:统计(A)中1的个数,把结果存入30H单元中。例:将内部RAM单元中20H单元到2FH单元的数传到外部RAM中的2000H到200FH单元中.源程序:ORG1000HMOVR0,#20HMOVDPTR,#2000HMOVR2,#10HLOOP:MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR2,LOOPSJMP$END查表程序设计解:由于每个存储单元中放有两个十六进制数,因此每个存储单元中十六进制数应分别转换成ASCII码。这就需要两次使用查表指令MOVCA,@A+PC,这两条查表指令在程序中位置是不相同的,故两次对PC调整的值也不相同。在编程时,可以先把整个程序编完,然后再计算两条加法指令中的data修正值并填入相应位置。ADDA,#17;第一次地址调整 MOVCA,@A+PC;第一次查表 MOV@R1,A;存第一次转换结果 MOVA,@R0;重新取出被转换数 SWAPA;高4位调入低4位 ANLA,#0FH;取出低4位 ADDA,#09;第二次地址调整 MOVCA,@A+PC;第二次查表 INCR1;修改目的数据块指针 MOV@R1,A;存第二次转换结果 INCR0;修改源数据块指针 INCR1;修改目的数据块指针 DJNZLEN,LOOP;若未转换完,则转LOOP SJMP$ ASCTAB:DB‘0’,’1’,’2’,’3’,’4’ DB‘5’,’6’,’7’,’8’,’9’ DB‘A’,’B’,’C’,’D’,’E’,’F’ END子程序设计在实际问题中,常常会遇到在一个程序中多次用到相同的运算或操作,若每遇到这些运算或操作,都从头编起,将使程序繁琐、浪费内存。因此在实际中,经常把这种多次使用的程序段,按一定结构编好,存放在存储器中,当需要时,可以调用这些独立的程序段。 子程序设计例如:如果某一实用程序需要10次调用某一子程序,那么只要在主程序的相应地安排10条调用指令就可以避免把同一子程序编写10遍,内存空间几乎可以减少9倍子程序的长度。 主程序和子程序是相对的,没有主程序也不会有子程序。同一程序既可以作为另一程序的子程序,也可以有自己的子程序。即子