1、第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计概概 述述1汇编语言程序设计的步骤(1)分析问题。(2)确定算法。(3)画出程序流程图。(4)分配内存单元。(5)编写汇编语言源程序。(6)汇编语言程序的调试。2022-11-141页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计流程线端点符号处理符号判断符号连接符号实现流程图之间的连接程序的判断功能程序的处理功能单元程序的起始和结束程序执行顺序流程2022-11-142页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计基本结构程序设计基本结构程序设计 ABC入口出口(a)顺序结
2、构图顺序结构图S1S2条件满足?入口出口(b)分支结构分支结构A条件满足?修改条件出口入口(c)循环结构循环结构 2022-11-143页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计一、顺序结构程序设计及举例一、顺序结构程序设计及举例例4-1 将片外数据存储器中2040H的内容拆成两段,其高4位存入2041H单元的低4位,其低4位存入2042H单元的低4位。开始(DPTR)2040H取数送A,R0分离高4位高、低4位交换(2041H)结果分离低4位(2042H)低4位结束START:MOV DPTR,#2040H ;MOVX A,DPTR ;取数送A MOV R0,A
3、 ;数据暂存于R0 SWAP A ;(A)的高、低4位互换 ANL A,#0FH ;分离出(A)的低4位 INC DPTR ;MOVX DPTR,A ;将分离结果送2041H单元 MOV A,R0 ;重新取数 ANL A,#0FH ;分离出(A)的低4位 INC DPTR ;MOVX DPTR,A ;将分离结果送2042H单元 END2022-11-144页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计例4-2 设数a存放在R1中,数b存放在R2中,计算 ,并将结果放入R4和R5中。2yab开始Aa,BaABAAb,R4AAB,AACYR5A结束2a2a2a2aMOV
4、A,R1 ;AaMOV B,A ;BaMUL AB ;计算CLR CSUBB A,R2;MOV R4,A ;结果低8位送R4MOV A,B ;高8位送ASUBB A,#00H ;MOV R5,A ;END ;结束 低8位减b2a2022-11-145页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计分支结构程序设计 在形成分支时,一般要有测试、转向和标识三个部分;测试:测试:通过对程序状态寄存器PSW中各位状态的测试,或通过对指定的单元或指定的寄存器的某位或某些位或全部位的测试,判断某条件是否成立,决定是否转移,形成分支,MCS-51系列单片机指令系统中的条件转移类指令均
5、具有这种测试功能,可用它们来实现。转向:转向:根据测试结果决定程序的走向。在源程序中由转移类指令完成,在流程图中以菱形逻辑框表示走向。标识:标识:对每个程序分支,给出一个标识,以标明程序转移的方向,一般将分支程序转向的第一个语句赋予一个标号,作为此分支的标识。2022-11-146页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计求符号函数,其中X在30H单元,结果y 放在31H单元 y=1,x00,x=0-1,x0?NN2022-11-147页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计ORG 1000HMOV A,30H;取x CJNE A,
6、#00H,N2;比较x0,则转N2MOV A,#00HAJMP L2;若x=0,置A=0,转L2N2:JB ACC.7,M2;判x是否为负数,是转M2MOV A,#01H;判x不为负数,A置为01HAJMP L2M2:MOV A,#81H;若x是负数,置A为-1L2:MOV 31H,A;A送结果单元END2022-11-148页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计设有两个16位无符号数NA,NB分别存放在8031单片机内部RAM的40H、41H及50H、51H单元中,当NANB时,将内部RAM的42H单元清0;否则,将该单元置成全1,试编制实现此功能的程序。Y
7、YNN开始 结果单元置大于标志结束NALNBL?NAL=NBL?NAH=NBH?NAHNBH?结果单元置非大于标志YY2022-11-149页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计ORG 1000HSTART1:MOV A,50H;取NB高8位CJNE A,40H,SUB1;判NA高8位=NB高8位?若不相等,则转SUB1MOV A,51H;若高8位相等,则取NB低8位CJNE A,41H,SUB1;判NA低8位=NB低8位?若不相等,则转SUB1SJMP SUB2;若NA=NB,则转SUB2SUB1:JC SUB3;若NANB,则转SUB3SUB2:MOV 4
8、2H,#0FFH;NANB,则置非大于标志SJMP DONESUB3:MOV 42H,#00H;NANB,则置大于标志DONE:RETEND2022-11-1410页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计NAHNBH?YNN开始将R0置成大于标志结束NALNBL?NAL=NBL?NAH=NBH?将R0置成非大于标志将R0送结果单元NNYNYY2022-11-1411页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计ORG 1000HSTART2:MOV R0,#00H;R0置成大于标志MOV A,50HCJNE A,40H,SUB1MOV
9、A,51HCJNE A,41H,SUB1SJMP SUB2SUB1:JC SUB3SUB2:MOV R0,#0FFH;置R0为非大于标志SUB3:MOV 42H,R0END2022-11-1412页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计例4-5 散转程序某单片机应用系统有16个键,经键盘扫描程序得到某个键的键码值(00H0FH)存放在R7之中,16个键盘的键处理程序入口地址分别为KEY1、KEY2、KEY16。EXAMP:MOV A,R7 ;(A)键码ADD A,R7ADD A,R7 ;(A)(A)*3MOV DPTR,#TABJMP A+DPTR ;散转TAB
10、:LJMP KEY0 ;转向第1个键的处理程序LJMP KEY1 ;转向第2个键的处理程序LJMP KEY16 ;转向第16个键的处理程序2022-11-1413页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计循环结构与循环结构程序设计循环结构与循环结构程序设计 循环初始状态循 环 控 制 条件循环体循环初始状态循 环 控 制 条件循环体2022-11-1414页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计例4-6 编一段程序完成下列计算 ,设n=10,Xi顺序存放在片内RAM从50H开始的连续单元中,所求的和放在R3及R4中。1niiyX开始
11、in,Y0YXi+Yii1结束i=0?开始i0,Y0YXi+Yii+1结束i=n?2022-11-1415页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计NSUN:MOV R2,#10;数组长度送R2MOV R3,#0;(R3)清零MOV R4,#0;(R4)清零MOV R0,#50H;数据块首址送R0LOOP:MOV A,R4 ADD A,R0MOV R4,A;和数的低字节送R4CLR AADDC A,R3MOV R3,A;和数的高字节送R3INC R0;修改地址指针DJNZ R2,LOOP;数据未加完,则继续继续执行RET2022-11-1416页第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计2022-11-1417页