打印

要显示一个数9865,用C很容易就把他分开了,提取出来

[复制链接]
2236|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hxdjb|  楼主 | 2010-6-22 16:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
千位9,百位8,十位6,个位5. 因为C支持LONG型数据,请教大家:用汇编如何处理,汇编单个字节最大才255.能否给个思路或例程,谢谢!

相关帖子

沙发
xuyiyi| | 2010-6-22 17:08 | 只看该作者
汇编用双字节数表示即可.

使用特权

评论回复
板凳
tg.liu| | 2010-6-22 17:45 | 只看该作者
BCD码转换.

使用特权

评论回复
地板
hxdjb|  楼主 | 2010-6-23 11:48 | 只看该作者
谢谢大家的回复!
到现在才有一点头绪,用双字节来存储。
INC number_l ;低字节数据寄存器加1
  jbc r3,2     ;  超过FF判断
  INC number_h ; 如果超过,高字节数据加1
NOP            ;没超过。

问题:十进制数9865 分两个字节存放就是 number_h=0x26   number_l=0x89
0X26和0X89分别转化成BCD码?然后怎么操作呢?BCD码还有压缩非压缩区分?
我要用数码管显示,千位9,百位8,十位6,个位5.

使用特权

评论回复
5
aresc| | 2010-6-23 13:31 | 只看该作者
本帖最后由 aresc 于 2010-6-23 13:35 编辑

之前有个帖子关于这个问题的算法,好像就是这个版块的。

类似下述方法:
1000 = 0x3E8, 假如9865存在两个字节A[2],其中A[0]为高字节,A[1]为低字节,全部为无符号数。
求千位数N4如下:
int N4 = 0;
while ((A[0] > 0x03) || ((A[0]==0x03) && (A[1]>=0xE8)))
{
         if (A[1] < 0xE8)
         {
                   A[0] -= 1;               // carry bit from low byte
          }
          A[1] -= 0xE8;
          A[0] -= 0x03;
          N4++;
}

上述while结束以后,N4就是千位的数字,并且A[2]数组里的数小于1000,可以用类似的方法继续求百、十位的数字,个位的数字就是求完十位数字之后A[2]中的剩余值。十位数字可以单字节计算了。

使用特权

评论回复
6
hxdjb|  楼主 | 2010-6-23 14:47 | 只看该作者
用C的没问题,我现在用的是义隆的汇编搞不定。

使用特权

评论回复
7
聊赖百无| | 2010-6-24 09:16 | 只看该作者
用C的没问题,我现在用的是义隆的汇编搞不定。

使用特权

评论回复
8
chenczy| | 2010-6-24 12:04 | 只看该作者
首先我想问的是你这个数是怎么来的,是自己义出来的还是加上来的

使用特权

评论回复
9
一棵小草| | 2010-6-24 13:08 | 只看该作者
https://bbs.21ic.com/icview-178272-1-1.html

这里有个C的算法,把它转成汇编就行了,应该不难的。

使用特权

评论回复
10
lsqdesign| | 2010-6-24 17:06 | 只看该作者
9865/1000 = 9
       (9856 - 9*1000)/100 = 8
(9856-9*1000-8*100)/10 = 6
9856-9*1000-8*100-6*10 = 5

这个思路能够实现

使用特权

评论回复
11
lxr89c51| | 2010-6-25 08:02 | 只看该作者
感觉现在来论坛的人的水平很低了。

使用特权

评论回复
12
aihe| | 2010-6-25 08:29 | 只看该作者
本来这个东西网上很多的,C汇编都有,只要找找就可以了
楼上水平很高,能对所有帖子都能做到不遗漏、无错误的回复吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

242

帖子

2

粉丝