首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有硬件除法指令的情况下,每1000个计时器的倍数打印一个计数器?

在没有硬件除法指令的情况下,每1000个计时器的倍数打印一个计数器?
EN

Stack Overflow用户
提问于 2012-07-17 13:51:54
回答 3查看 719关注 0票数 2

我正在尝试在汇编中实现一个计数器,除了执行正常的任务外,我还想打印计数器。因此,如果我的计数器是10秒,我希望在这10秒内执行任务,并打印10,9,8..and,依此类推

我能想到的唯一方法是检查以毫秒为单位的current - starting时间是否为完美的千,例如,10为10,9为9000,等等,然后打印这些数字。

所以我的问题是,如何在ARM组件中实现模数函数?我在ARMSIM中工作,它没有除法指令。

它确实有二进制右移和二进制左移,二进制AND,XOR等等,有没有一种方法可以使用这些操作来实现呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-17 14:13:18

首先,我不相信这是解决问题的最好方法。

但是如果你可以乘以1000,那么除以1000并不是那么困难。做二进制搜索。如下所示:

代码语言:javascript
复制
; Compute x / 1000 by binary search.
lo = x >> 10 ; x / 1024
hi = x >> 9  ; x / 512
while lo < hi 
  mid = (lo + hi) >> 1;
  test = mid * 1000
  if test < x then lo = mid + 1
  else if test > x then hi = mid - 1
  else return mid
end
return hi

有了这个商,你可以用x-q* 1000做mod。

当然,x乘以1000就是x << 10 -x << 4-x << 3

票数 0
EN

Stack Overflow用户

发布于 2012-07-17 15:16:26

您的代码显然会在某个时刻开始执行任务,T。

如果你知道开始时间T,你可以简单地在上面加上1000,得到你应该打印答案的时间U。

然后简单地将时间与U进行比较。如果时间大于U,则打印答案,并将U设置为U+1000作为打印下一个答案的限制。

人们经常使用这一基本思想为实时操作系统构建“计时器”。

不需要除法:-}

票数 2
EN

Stack Overflow用户

发布于 2016-05-08 13:33:51

二进制形式的奇数的最后一位总是= 1,因此3--> 11 5--> 101 7--> 111假设:

代码语言:javascript
复制
Mov R0,#0x01
Mov R1,#0x23
And R3,R0,R1
CMP R3,#0X01
BEQ ODD
BNE EVEN
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11516707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档