В данный момент я работаю с RNS на ассемблере x86 AT&T. Мне нужно поместить 5 остатков в один регистр, %eax. Часть кода:
.macro division number
mov $0, %ecx
loop_getremainders:
mov $0, %edx
mov number, %eax
mov dividers(,%ecx,4), %ebx
div %ebx
mov %edx, remainders(,%ecx,4)
inc %ecx
cmp $5, %ecx
jne loop_getremainders
int $0x80
.endm
.section .data
number: .long 158
remainders: .long 0,0,0,0,0
dividers: .long 7,15,31,127,8192
.section .text
.global _start
_start:
division number
mov $1, %eax
mov $0, %ebx
int $0x80
Я знаю, что для записи 7 в двоичном формате мне нужно 3 бита, 15 - 4 бита и т. д. Я хочу записать каждый остаток в один %eax, «связанный» в следующем порядке: 111 1111 11111 1111111 1111111111111
(32 бита, пробелы для лучшего представления) Как изменить его с десятичного на двоичный и поместить эти 5 чисел в 1 32-битный регистр?