《《程序设计本科》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《程序设计本科》PPT课件.ppt(29页珍藏版)》请在金锄头文库上搜索。
1、例例例例3-23-2:将:将:将:将R4R5R4R5双字节符号数求补码程序。双字节符号数求补码程序。双字节符号数求补码程序。双字节符号数求补码程序。 ORG 0000HORG 0000H MOV AMOV A,R4R4 JB ACC.7, CPLL JB ACC.7, CPLL ;判符号位;判符号位;判符号位;判符号位 SJMP $ ;SJMP $ ;正数的补码原码正数的补码原码正数的补码原码正数的补码原码CPLL: MOV ACPLL: MOV A,R5 R5 ;取低字节;取低字节;取低字节;取低字节 CPL ACPL A ADD A ADD A,#1 #1 ;低字节变补;低字节变补;低字节
2、变补;低字节变补 MOV R5MOV R5,A A MOV A MOV A,R4 R4 ;取高字节;取高字节;取高字节;取高字节 CPL ACPL A ADDC A ADDC A,#0 #0 ;高字节变补;高字节变补;高字节变补;高字节变补 ORL A, #80H ; ORL A, #80H ; 恢复负号恢复负号恢复负号恢复负号 MOV R4MOV R4,A A SJMP $ SJMP $分析:先判符号,再根据不同情况处理。分析:先判符号,再根据不同情况处理。分析:先判符号,再根据不同情况处理。分析:先判符号,再根据不同情况处理。地址地址数据数据TABTAB0 0TAB+1TAB+11 1TA
3、B+2TAB+24 4TAB+3TAB+39 9TAB+4TAB+416H16HTAB+5TAB+525H25H例例3-3 求求求求 Y=XY=X2 2 (0X5)(0X5)。分析分析 :变量变量X放在片内放在片内RAM的的20H单元单元,其值为其值为00H05H之间之间, Y Y在片内在片内RAM的的21H单元,单元,在程序存储器安排一张平在程序存储器安排一张平方表,方表,通过查表通过查表求求求求 Y=XY=X2 2 这样比完成这样比完成 X*X 编程简便多了。编程简便多了。表表 ORG 0000H MOV DPTR,#TAB MOV A, 20H ;取;取X MOVC A,A+DPTR ;
4、 查表查表 MOV 21H,A ; 存于存于Y SJMP $TAB: DB 00H,01H,04H,09H,16H,25H END 首地址为首地址为TAB,以,以DPTR指向表首址,利用查表指令指向表首址,利用查表指令MOVC A,A+DPTR,即可求得。,即可求得。表中数据用表中数据用BCD码存放合乎人们的习惯码存放合乎人们的习惯. 如果平方值为两个字节,程序应如何编。如果平方值为两个字节,程序应如何编。DPTRA例例例例3-4 3-4 分解压缩式分解压缩式分解压缩式分解压缩式BCDBCD码码码码, ,使其成为非压缩式使其成为非压缩式使其成为非压缩式使其成为非压缩式BCDBCD码。码。码。码
5、。如把如把如把如把 65H65H06H06H和和和和05H05H, ,见图见图见图见图ORG 0000HORG 0000HMOVMOV R0 R0,#40H#40H;设指针;设指针;设指针;设指针MOVMOV A A,R0R0;取一个字节;取一个字节;取一个字节;取一个字节MOVMOV R2 R2,A A;暂存;暂存;暂存;暂存ANLANL A A,#0FH#0FH;清;清;清;清0 0高半字节高半字节高半字节高半字节INCINC R0 R0MOVMOV R0 R0,A A ;保存数据个位;保存数据个位;保存数据个位;保存数据个位片内片内RAM42H41H40H65MOV A,R2SWAP A
6、 ;十位换到低半字节;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位;保存数据十位SJMP $050506063.4 3.4 3.4 3.4 分支程序的设计分支程序的设计分支程序的设计分支程序的设计 由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分由条件转移指令构成程序判断框部分,形成分支结形成分支结形成分支结形成分支结构,通常转移条件取决标志位。常见的分支见下图:构,通常转移条件取决标志位。常见的分支见下图:构,通常转移条件取决标志位。常见的分支见下图:构,通常转移条件取决标志位。常见的分支见下图:条件满足条件满
7、足?N影响条件影响条件Y处理段处理段条件满足条件满足?N影响条件影响条件Y处理处理1处理处理2【例例例例3-53-5】 在内部在内部在内部在内部RAMRAM的的的的40H40H和和41H41H地址单元中,有地址单元中,有地址单元中,有地址单元中,有 2 2个无符号数,试编程比较这两数的大小,将大数存于个无符号数,试编程比较这两数的大小,将大数存于个无符号数,试编程比较这两数的大小,将大数存于个无符号数,试编程比较这两数的大小,将大数存于内部内部内部内部RAMRAM的的的的GRGR单元,小数存于单元,小数存于单元,小数存于单元,小数存于LELE单元,如两数相等,单元,如两数相等,单元,如两数相等
8、,单元,如两数相等,则分别送入则分别送入则分别送入则分别送入GRGR和和LELE地址单元。地址单元。地址单元。地址单元。分析分析分析分析 采用采用采用采用CJNECJNE指令,即可以判断相等与否,还可以指令,即可以判断相等与否,还可以指令,即可以判断相等与否,还可以指令,即可以判断相等与否,还可以通过通过通过通过CYCY标志判断大小,程序如下:标志判断大小,程序如下:标志判断大小,程序如下:标志判断大小,程序如下: ORG 0000H ORG 0000H MOV A, 40H MOV A, 40H CJNE A, 41H, NEQ CJNE A, 41H, NEQ; ;两数不等转两数不等转两数
9、不等转两数不等转 NEQNEQ MOV GR, A MOV GR, A; ;两数相等,两数相等,两数相等,两数相等,GRGR单元和单元和单元和单元和LELE单元均存此数单元均存此数单元均存此数单元均存此数 MOV LE, A MOV LE, A SJMP $ SJMP $NEQ: JC LESSNEQ: JC LESS;A;A小则转小则转小则转小则转LESSLESSMOV GR, AMOV GR, A;A;A大,大数存大,大数存大,大数存大,大数存GRGR单元单元单元单元MOV LE, 41HMOV LE, 41H; ;小数存小数存小数存小数存LELE单元单元单元单元 SJNE $ SJNE
10、$LESS: MOV LE, ALESS: MOV LE, A;A;A小,小数存小,小数存小,小数存小,小数存LELE单元单元单元单元 MOV GR, 41HMOV GR, 41H; ;大数存大数存大数存大数存GRGR单元单元单元单元 SJMP $ SJMP $GR EQU 30HGR EQU 30HLE EQU 31HLE EQU 31H END END 例例 3-6】 设变量设变量X以补码形式存放在片内以补码形式存放在片内RAM的的30H单元,单元, 函数函数Y与与X有如下关系式:有如下关系式: X X0Y= 20H X=0 X+5 X0;X0转转转转EDED MOV A, #05H MO
11、V A, #05H;X0;X0完成完成完成完成X+5X+5 ADD A, #30H ADD A, #30H MOV 30H, A MOV 30H, A SJMP ED SJMP EDNEXT: MOV 30H, #20HNEXT: MOV 30H, #20H;X=0, Y=20H;X=0, Y=20HED: SJNE $ED: SJNE $ 例例例例 用单片机加重力传感器作磅秤,秤出重量后算出用单片机加重力传感器作磅秤,秤出重量后算出用单片机加重力传感器作磅秤,秤出重量后算出用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以行李运费价格,其秤出的重量以行李运费价格,其秤出的
12、重量以行李运费价格,其秤出的重量以10kg10kg为为为为1 1个计价单位个计价单位个计价单位个计价单位G , G , GG已存入已存入已存入已存入40H40H单元。单元。单元。单元。计价方法为计价方法为计价方法为计价方法为50kg50kg以内按以内按以内按以内按3 3元元元元, , 50kg50kg以上分段计价以上分段计价以上分段计价以上分段计价: : 50kg50kg按按按按3 3元计价,超过部分元计价,超过部分元计价,超过部分元计价,超过部分按按按按2 2元计价。元计价。元计价。元计价。 由此列出算式:由此列出算式:由此列出算式:由此列出算式: G3 + (G-5)2; 当当G5M=G3
13、 ;当;当G5 3G因重复使用,先暂存在因重复使用,先暂存在R2。流程见左流程见左, 程序如下:程序如下: ORG 0100HORG 0100HFRTFRT: MOV AMOV A,40H40H;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位;取行李重量计价单位GG MOV R3 MOV R3,A A MOV B MOV B,#03H#03H;运费运费运费运费M=G3M=G3 MUL AB MUL AB MOV R2 MOV R2,A A;暂存;暂存;暂存;暂存3G3G MOV AMOV A,R3R3;取回;取回;取回;取回GG CJNE A CJNE A,#05H#05H,L1L
14、1;G 5 ?G 5 ? SJMP WETC SJMP WETCL1L1: JCJC WETC WETC;是,转至;是,转至;是,转至;是,转至WETCWETC SUBB A SUBB A,#05H#05H;否则;否则;否则;否则 M=3G+2(G-5)M=3G+2(G-5) RLC A RLC A ADD A ADD A,R2R2 MOV R2 MOV R2 ,A AWETCWETC:MOV 41HMOV 41H,R2 R2 ;存运费;存运费;存运费;存运费 MM RET RET1. 利用转移地址表实现转移利用转移地址表实现转移 例例例例3-73-7 根据根据根据根据R3R3的内容转向对应的
15、程序,的内容转向对应的程序,的内容转向对应的程序,的内容转向对应的程序,R3R3的内容为的内容为的内容为的内容为0 0n,n,处理程序的入口符号地址分别为处理程序的入口符号地址分别为处理程序的入口符号地址分别为处理程序的入口符号地址分别为PR0PR0PRn (n128)PRn (nCY;0-CYSUBB A,R1SUBB A,R1; ;两数相减,比较大小两数相减,比较大小两数相减,比较大小两数相减,比较大小JNC LP3JNC LP3 ; ;原数仍为最大值转原数仍为最大值转原数仍为最大值转原数仍为最大值转LP3LP3MOV A,R1MOV A,R1; ;否,用此数代替最大值否,用此数代替最大值否,用此数代替最大值否,用此数代替最大值SJMP LP4SJMP LP4 ; ;无条件转移无条件转移无条件转移无条件转移LP3:ADD A,R1LP3:ADD A,R1; ;恢复原最大值(因用恢复原最大值(因用恢复原最大值(因用恢复原最大值(因用SUBBSUBB做比较指令做比较指令做比较指令做比较指令) )LP4:DJNZ R2,LP1LP4:DJNZ R2,LP1 ; ;若没比较完,继续比较若没比较完,继续比较若没比较完,继续比较若没比较完,继续比较RETRET; ;比较完比较完比较完比较完, ,返回返回返回返回ENDEND