论坛风格切换切换到宽版
  • 2525阅读
  • 6回复

这里人气旺,望大家帮解答 [复制链接]

上一主题 下一主题
离线永远的FM
 
发帖
12119
只看楼主 倒序阅读 0楼 发表于: 2007-10-28
现在我正在学mcs51,想请教大家一个问题:
将一个8位数送到acc里面(这个数其实只有低4位有效),然后我想做下面事情:
如果acc为#001h(acc的内容),就跳转到子程序ch1;
如果acc为#002h,跳转到子程序ch2,
。。。。。。。。
以此类推。
对了,因为有特殊需要,我只能用汇编语言来写啦。。。。。。。
请问这样的程序要如何写?能给点思路吗???

本来这个帖要发到单片机板块的,不过这里人气旺只好先放在这里了,望版主见谅
离线小比尔/5
发帖
2582
只看该作者 1楼 发表于: 2007-10-28
用散转表
mov dptr,#tab
anl a,#0fh ;掩掉高四位
dec a ;a减1
mov r0,a
add a,r0 ;a乘以2,因为一个ajmp指令占两个字节
jmp @a+dptr ;跳到表上相应位置
tab:ajmp ch1
  ajmp ch2
  ajmp ch3
...
离线永远的FM
发帖
12119
只看该作者 2楼 发表于: 2007-10-28
请问一下:
#tab是什么来的?tab程序的入口地址?
离线小比尔/5
发帖
2582
只看该作者 3楼 发表于: 2007-10-28
[quote=永远的fm]请问一下:
#tab是什么来的?tab程序的入口地址?[/quote]
下面有一个“tab:”的标号,#tab表示的就是它的地址
离线永远的FM
发帖
12119
只看该作者 4楼 发表于: 2007-10-28
dec a ;a减1
请问为什么a要减去1呢?
离线小比尔/5
发帖
2582
只看该作者 5楼 发表于: 2007-10-28
[quote=永远的fm]dec a ;a减1
请问为什么a要减去1呢?[/quote]
因为你在1的时候要跳转到ch1,但实际上这个时候ajmp ch1这句话与dptr之间的偏移量为0。
离线永远的FM
发帖
12119
只看该作者 6楼 发表于: 2007-10-28
完全明白了!
谢谢