




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第四章汇编语言程序设计顺序结构程序是一种最简单、最基本的程序,按照程序编写的顺序逐条依次执行,直到程序结束。这是程序的最基本的形式,任何程序都离不开这种形式。例1:ORG 0000H LJMP START START:MOV A,20H;将20H单元中的数据取 到A中 ANL A,#0FH;得到低4位 MOV 21H,A;存入21H单元 MOV A,20H;再将原数送A SWAP A ;A中高低半字节交换 ANL A,#0FH;得到低半字节 MOV 22H,A;将拆开的高半字节存 22H单元 SJMP $ ;用于调试程序,表示程 序结束 例2:将内部RAM40H单元中的一压缩BCD数转换 为二进制数,存入41H中。MOV A,40H ;将BCD数的十位放A的低4位 SWAP A ANL A,#0FH MOV B,#10 MUL AB ;十位乘以10 ANL 40H,#0FH ;将BCD数的个位保留在 40H单元中 ADD A,40H ;十位×10加个位 MOV 41H,A RET4.3分支结构的程序1.无条件转移 它的程序转移方向是设计者事先安排的,与已执行程序的结果无关,使用时只需给出正确的转移目标地址或偏移量即可,如: ORG 0000H LJMP MAIN ··· ORG 0030H MAIN: ··· ···2.条件转移 它是根据已执行程序对标志位或累加器或对内部RAM某位的影响结果,决定程序的走向,形成各种分支。在编写有条件转移语句时要特别注意以下两点: (1)在使用条件指令形成分支前,一定要安排可供条件转移指令进行判别的条件。如若采用“JCrel”指令,在执行前必须使用影响C标志的指令;若采用“CJNEA,#data,rel”指令,在执行此程序前必须使用改变累加器A内容的指令,以便为测试准备条件。 (2)要正确选定所用的转移条件和转移目标地址。3.散转 它是根据某种已输入的或运算的结果,使程序转向各个处理程序中去。MCS-51单片机具有一条专门的散转指令JMP@A+DPTR,散转指令的操作是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,即散转的目的地址。 【例4.3】编制程序使y按下式赋值: VAR EQU 30H FUNC EQU 31H START: MOV A,VAR ;取x JZ COMP ;为0转COMP JNB ACC.7,POSI;>0转POSI MOV A,#0FFH ;<0,-1A SJMP COMP POSI: MOV A,#01H COMP: MOV FUNC,A RET在片内RAM40和50H单元开始各存放有一个双字节数(高8位在偶地址)无符号数,编程比较其大小,把xiao数送片内RAM70H、71H单元。散转程序设计举例 散转指令的操作是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,即散转的目的地址。 散转程序的设计可采用下面两种方法: (1)数据指针DPTR固定,根据累加器A的内容,程序转入相应的分支程序中去。 (2)累加器A清零,根据数据指针DPTR的值,决定程序转向的目的地址。DPTR的值可以用查表或其他方法获得。例4-4设计128路分支的转移程序。设128个出口地 址分别为:subrut00、subrut01、···、subrut7F; 要转移的出口信息放在工作寄存器R3中。注意出口信 息是0~127之间的整数。由于AJMP指令为两个字节指令,整个入口地址表占用256字节。每两条相邻AJMP指令的首址相差两个字节,因此在第二条指令中将出口信息乘以2,可正确实现查表与转移。该程序要求128个转移目的地址(subrut00~subrut7F)必须驻留在与绝对转移指令AJMP同一个2KB存储区内。如果各个转移小程序较长,超过2K字节,应改用LJMP指令,目的地址可以任意安排在64K字节空间的程序存储器空间内,但程序应作相应的修改。(2)利用转向地址表实现转移 这种方法将转移地址列成表格,将表格的内容作为转 移的目标地址。 【例】根据R3(0~n)的内容转向对应的程序;处理程序的入口符号地址分别为PR0~PRn(n<256) 【分析】 将PR0~PRn入口地址列在表格中,每一项占两个单元; PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn在表中的偏移地址; 从偏移地址2n和2n+1两个单元分别取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即转移到PRn入口执行。 PR0 EQU 0110

ys****39
实名认证
内容提供者


最近下载