我可以在任何大小的asm中创建数组。好吧,让我们创建一个bool数组。所以这是我的问题:我如何解决我的阵列中的第i位?
答案 0 :(得分:0)
Psuedocode(由于未指定架构):
访问第i位:
将bool视为寄存器中的一组标志:其中0 = false且1 = true
考虑使用8位机器:
76543210
registerA = 00100100
-----------------------
-----------------------
To access 5th bit : if ((00100100 & 00100000)>>5) == 1: 5th bit is true; else: false
To access 6th bit : if ((00100100 & 01000000)>>6) == 1: 6th bit is true; else: false
similarly for nth bit : if (((number)&(1 << n)) >> n) == 1: nth bit is true; else: false
答案 1 :(得分:0)
第一种方式 - 面具:
or byte ptr [array+x], %mask% ; %mask% - any value that 1 byte can hold (i.e.: 40h - 1100 0000, 7th & 8th bit will be set on little-endian architecture)
显然,您可以使用带有WORD,DWORD(或x64上的QWORD)的较大面具。
第二种方式 - BT*:
bts [array], x ; x-th but will be set, previous state will be stored @ CF