汇编 散转程序

[复制链接]
查看11 | 回复1 | 2008-8-11 11:05:26 | 显示全部楼层 |阅读模式
编制程序用单片机实现四则运算。
解:在单片机的键盘上设置“+、-、×、÷”四个运算按键。其键值存放在寄存器R2中,当(R2)=00H时做加法运算,当(R2)=01H时做减法运算,当(R2)=02H时做乘法运算,当(R2)=03H时做除法运算。

P1口输入被加数、被减数、被乘数、被除数,输出商或运算结果的低8位;

P3口输入加数、减数、乘数、除数,输出余数或运算结果的高8位。
程序如下:


ORG1000H

START: MOVP1, #DATA1H; 给 P1口、P3口送入数据

DATA1, DATA2, 用于计算

MOVP3, #DATA2H
MOVDPTR, #TABLE ; 将基址TABLE送DPTR
CLRC
; Cy清0

MOVA, R2
; 将运算键键值送A

SUBBA, #04H
; 将键值和04H相减,用于产生Cy标志
JNCERROR
; 若输入按键不合理,程序转ERROR处;

否则,按键合理,程序继续执行
ADDA, #04H
; 还原键值
CLRC
; Cy清0
RLA
; 将A左移,即键值×2,

形成正确的散转偏移量
JMP@A+DPTR
; 程序跳到(A)+(DPTR)形成的新地址
TABLE: AJMPPRG0
; 程序跳到PRG0处,将要做加法运算
AJMPPRG1
; 程序跳到PRG1处,将要做减法运算
AJMPPRG2
; 程序跳到PRG2处,将要做乘法运算
AJMPPRG3
; 程序跳到PRG3处,将要做除法运算
ERROR:(按键错误的处理程序)(略)
有点看不懂,高手给分析下这下面的程序是怎么运行的.重点SUBBA, #04H和RLA

JMP@A+DPTR
谢谢
SUBBA, #04H
; 将键值和04H相减,用于产生Cy标志
JNCERROR
; 若输入按键不合理,程序转ERROR处;

否则,按键合理,程序继续执行
ADDA, #04H
; 还原键值
CLRC
; Cy清0
RLA
; 将A左移,即键值×2,

形成正确的散转偏移量
JMP@A+DPTR
; 程序跳到(A)+(DPTR)形成的新地址

回复

使用道具 举报

千问 | 2008-8-11 11:05:26 | 显示全部楼层
SUBB A, #04H ; 如果结果Cy=1说明键值小于04H,是合理的,否则键值大于04H就出错。 RL A ; 起键值×2的作用,因为散转表中的每条指令JMP @A+DPTR的代码都是双字节的,所以散转偏移量应该是键值的两倍。如果每组代码是N字节,这里就要×N。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行