我正在尝试在汇编中实现一个计数器,除了执行正常的任务外,我还想打印计数器。因此,如果我的计数器是10秒,我希望在这10秒内执行任务,并打印10,9,8..and,依此类推
我能想到的唯一方法是检查以毫秒为单位的current - starting时间是否为完美的千,例如,10为10,9为9000,等等,然后打印这些数字。
所以我的问题是,如何在ARM组件中实现模数函数?我在ARMSIM中工作,它没有除法指令。
它确实有二进制右移和二进制左移,二进制AND,XOR等等,有没有一种方法可以使用这些操作来实现呢?
发布于 2012-07-17 14:13:18
首先,我不相信这是解决问题的最好方法。
但是如果你可以乘以1000,那么除以1000并不是那么困难。做二进制搜索。如下所示:
; 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
发布于 2012-07-17 15:16:26
您的代码显然会在某个时刻开始执行任务,T。
如果你知道开始时间T,你可以简单地在上面加上1000,得到你应该打印答案的时间U。
然后简单地将时间与U进行比较。如果时间大于U,则打印答案,并将U设置为U+1000作为打印下一个答案的限制。
人们经常使用这一基本思想为实时操作系统构建“计时器”。
不需要除法:-}
发布于 2016-05-08 13:33:51
二进制形式的奇数的最后一位总是= 1,因此3--> 11 5--> 101 7--> 111假设:
Mov R0,#0x01
Mov R1,#0x23
And R3,R0,R1
CMP R3,#0X01
BEQ ODD
BNE EVENhttps://stackoverflow.com/questions/11516707
复制相似问题