我正在尝试在程序集中实现一个计数器,除了执行正常任务外,我想打印计数器。 因此,如果我的计数器是10秒,我想在10秒钟内执行任务,并打印10,9,8 ......等等
我能想到的唯一方法就是检查current - starting
时间(以毫秒为单位)是否为完美千分之一,例如,10为10,000,9000为9等,并打印这些数字。< / p>
所以我的问题是我如何在ARM汇编中执行模数函数? 我在ARMSIM工作,没有分工指导。
它有二进制右移和二进制左移,二进制AND,XOR等 有没有办法使用这些操作实现这一目标?
答案 0 :(得分:2)
您的代码显然会在某个时刻开始执行您的任务,T。
如果您知道开始时间T,您只需添加1000即可获得打印答案时的时间U.
然后简单地将时间与U进行比较。如果更大,则打印答案,并将U设置为U + 1000作为下一个要打印的答案的限制。
人们经常建立&#34;计时器&#34;使用这个基本想法的实时操作系统。
不需要分组: - }
答案 1 :(得分:0)
嗯,首先我不相信这是解决问题的最佳方法。
但是,如果你可以乘以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&lt;&lt; 10-x&lt;&lt; 4 - x&lt;&lt; 3
答案 2 :(得分:-1)
二进制中奇数的最后一位数总是= 1,这样3 - > 11 5 - &gt; 101 7 - &gt; 111 所以假设:
Mov R0,#0x01
Mov R1,#0x23
And R3,R0,R1
CMP R3,#0X01
BEQ ODD
BNE EVEN