此测试要求在“ BGE”条件下分支到标签。存储在要比较的寄存器中的值是:
std::cout << A::b << std::endl
我希望它分支,但是0X8F不大于0X3。在Keil上模拟我的代码证明了这一点。
我想知道是否有人知道它为什么不分支以及如何将0X8F读取为大于0X3!
非常感谢<3
答案 0 :(得分:2)
请记住,BGE
是一个带符号的比较,因此在您的示例中,鉴于第一个操作数(r0
)不大于或等于第二个操作数({{ 1}})。
r1
出于完整性的考虑,并且正如Michael所建议的那样,更普遍(或建议)使用LDR r0,=0X3 ; load 0X00000003
LDR r1,=0X8F ; load 0x0000008F
CMP r0,r1 ; (r0 - r1) and sets the condition register
BGE a_label ; Conditional branch which checks if it was greater or equal (False)
SUBS r1,r1, #0XC9
而不是MOV r0,#0X00000003
来加载常量(很可能生成的文件恰好是相同)See this。
答案 1 :(得分:2)
我认为您误解了const dateArray = ['2018-12-15', '2018-11-20', '2018-12-20']
const prices = [{ _id: '5bf454d9c4a8bc6e246afd05',date: '2018-12-15',time: '9:00 - 10:00',status: 'available',price: 35 },{ _id: '5bf455adf678f76f7ffb9144',date: '2018-11-20',time: '15:00 - 16:00',status: 'available',price: 55 },{ _id: '5bf455caf678f76f7ffb914b',date: '2018-11-20',time: '12:00 - 13:00',status: 'available',price: 45 },{ _id: '5bfec692d25d720f29eb49e1',date: '2018-12-20',time: '9:00 - 10:00',status: 'available',price: 33 }]
let obj = dateArray.reduce((obj, date) => {
if (!obj[date]) obj[date] = {date, timePrice:[]}
// get prices for specific date
let pr = prices.filter(item => item.date === date)
// for each price push just the time and price values as a new object
obj[date].timePrice.push(pr.map(({time, price}) => ({time, price})))
return obj
}, {} )
// Object.values(obj) will be your array
console.log(Object.values(obj))
与条件代码的“比较”变体一起工作的方式。当您阅读CMP
后跟一条条件指令时,请先将条件代码移至CMP
的两个参数之间。因此
CMP
表示“如果CMP r0, r1
BGE label
大于或等于r0
等于或等于r1
,则分支。在您的情况下,r0
是3,而r1
是0x8F(143),因此显然分支不会发生。