flat assembler
Message board for the users of flat assembler.
  
|  Index
      > Macroinstructions > how count bits in macro ? Goto page 1, 2 Next | 
| Author | 
 | 
| revolution 07 May 2025, 07:42 bsr     Code: display bsr 01001b + '0' flat assembler version 1.73.31 (16384 kilobytes memory) 3 1 passes, 0 bytes. | |||
|  07 May 2025, 07:42 | 
 | 
| Roman 07 May 2025, 08:10 fasmw supported bsr ! wow ! Its cool.
 Thanks. | |||
|  07 May 2025, 08:10 | 
 | 
| Roman 07 May 2025, 08:51 How about ror in fasmw macro?
 Or how implement ror in fasmw macro? | |||
|  07 May 2025, 08:51 | 
 | 
| macomics 07 May 2025, 08:57 Roman wrote: How about ror in fasmw macro? Code: a = 7 shl 3 n = 3 a = 0xFFFFFFFF and (a shl (32-n)) and (a shr n) ; 32-bit ror display a + '0', 13, 10 b = 1048576 k = 10 b = 0xFFFFFFFFFFFFFFFF and (b shr (64-k)) and (b shl k) ; 64-bit rol c = 1 shl 32 i = 24 if i < 38 c = 0x7FFFFFFFFF and (c shl (39-i)) and (c shr i) ; 39-bit ror end if | |||
|  07 May 2025, 08:57 | 
 | 
| Roman 07 May 2025, 09:15 I get zero.
 Code: n = 3 v = 6025 __@v1 = 0xFFFFFFFF and (v shl (32-n)) and (v shr n) mov ecx,__@v1 ; get zero must be 0x78900001 | |||
|  07 May 2025, 09:15 | 
 | 
| revolution 07 May 2025, 09:20 The shr and shl parts need to be ored together, then and with the 0xffffffff mask. | |||
|  07 May 2025, 09:20 | 
 | 
| macomics 07 May 2025, 09:27 Code: macro display_int x { local ..u, ..v ..v = x ..u = 1 while ..u < ..v ..u = ..u * 10 end while if ..v = 0 display '0' else while ..u > 1 ..u = ..u / 10 display '0' + ..v / ..u ..v = ..v - ..u * ( ..v / ..u ) end while end if display ' ' } a = 6020 n = 3 BIT_MASK = 0xFFFFFFFF BIT_LENGTH = 32 a = ( BIT_MASK AND ( a shr ( BIT_LENGHT - n + 1 ))) OR ( BIT_MASK AND ( a shl n )) display_int a mov ecx, a Code: 48160    Last edited by macomics on 07 May 2025, 10:08; edited 1 time in total | |||
|  07 May 2025, 09:27 | 
 | 
| Roman 07 May 2025, 09:32 Thanks.
 How about rol ? Last edited by Roman on 07 May 2025, 09:35; edited 1 time in total | |||
|  07 May 2025, 09:32 | 
 | 
| macomics 07 May 2025, 09:34 Roman wrote: must be 0x78900001 | |||
|  07 May 2025, 09:34 | 
 | 
| Roman 07 May 2025, 09:36 macomics
 How about rol ? | |||
|  07 May 2025, 09:36 | 
 | 
| macomics 07 May 2025, 09:39 Code: use64 macro display_int x { local ..u, ..v ..v = x ..u = 1 while ..u < ..v ..u = ..u * 10 end while if ..v = 0 display '0' else while ..u > 1 ..u = ..u / 10 display '0' + ..v / ..u ..v = ..v - ..u * ( ..v / ..u ) end while end if display ' ' } a = 6025 n = 12 BIT_MASK = 0x7FFFFFFFFF BIT_LENGTH = 1 + bsr BIT_MASK a = ( BIT_MASK AND ( a shl ( BIT_LENGTH - n + 1 ))) OR ( BIT_MASK AND ( a shr n )) display_int a mov rcx, a Code: 517811994625    Last edited by macomics on 07 May 2025, 10:08; edited 1 time in total | |||
|  07 May 2025, 09:39 | 
 | 
| macomics 07 May 2025, 09:45 | |||
|  07 May 2025, 09:45 | 
 | 
| Roman 07 May 2025, 09:47 ror wrong result.
 Code: n = 12 v = 6025 __@v1 = ( 0xFFFFFFFF AND ( v shr ( 32 - n ))) OR ( 0xFFFFFFFF AND ( v shl n )) I get 1789000h but must be 7890001h | |||
|  07 May 2025, 09:47 | 
 | 
| macomics 07 May 2025, 09:50 Roman wrote: ror wrong result. Last edited by macomics on 07 May 2025, 10:14; edited 2 times in total | |||
|  07 May 2025, 09:50 | 
 | 
| Roman 07 May 2025, 09:51 macomics
 Try for ror n = 12 a = 6025 | |||
|  07 May 2025, 09:51 | 
 | 
| macomics 07 May 2025, 10:02 Roman wrote: Try Last edited by macomics on 07 May 2025, 10:14; edited 1 time in total | |||
|  07 May 2025, 10:02 | 
 | 
| macomics 07 May 2025, 10:03 It is 39-bit ror. Use BIT_MASK = 0xFFFFFFFF for 32-bit and BIT_MASK = 0xFFFFF for 20-bit | |||
|  07 May 2025, 10:03 | 
 | 
| macomics 07 May 2025, 10:12 Code: use64 macro display_int x { local ..u, ..v ..v = x ..u = 1 while ..u < ..v ..u = ..u * 10 end while if ..v = 0 display '0' else while ..u > 1 ..u = ..u / 10 display '0' + ..v / ..u ..v = ..v - ..u * ( ..v / ..u ) end while end if display ' ' } a = 6025 n = 12 BIT_MASK = 0x7FFFFFFFFF BIT_LENGTH = 1 + bsr BIT_MASK a = ( BIT_MASK AND ( a shl ( BIT_LENGTH - n + 1 ))) OR ( BIT_MASK AND ( a shr n )) display_int a mov rcx, a Code: 517811994625    
 | ||||||||||
|  07 May 2025, 10:12 | 
 | |||||||||
| Roman 07 May 2025, 10:14 I do this for ror:
 Code: use32 n = 12 v = 6025 BIT_MASK = 0xFFFFFFFF __@v1 = ( BIT_MASK AND ( v shr ( 1 + bsr BIT_MASK - n ))) OR ( BIT_MASK AND ( v shl n )) mov eax,__@v1 ;IDA Pro show 1789000h I get 1789000h but must be 78900001h Code: mov eax,6025 ror eax,12 ;IDA Pro show 78900001h | |||
|  07 May 2025, 10:14 | 
 | 
| Goto page 1, 2  Next < Last Thread | Next Thread > | 
| Forum Rules: 
 | 
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.