Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Помогите написать короткий код на ассемблере

502  
  Малютка_Э прохожий21.05.13 14:29
Малютка_Э
NEW 21.05.13 14:29 
Привет! Нужно написать код, который перевернёт биты числа! Например:
В регистре еах записано число 0x56378976. Его нужно перевернуть и записать в ebx, т.е. число 0x76893756.
Как это сделать? Уровень знаний минимальный.
Спасибо заранее :)
#1 
viger2 коренной житель21.05.13 15:20
viger2
NEW 21.05.13 15:20 
в ответ Малютка_Э 21.05.13 14:29
о каком ассемблере какого процессора идет речь? в зависимости от этого может быть тысячи решений.
в общем я бы сначала сохранил бы содержание исходного регистра в стеке, и очистил бы выходной регистр,
а потом сделал бы цикл в котором данные копировались бы в промежуточный регистер очищались бы все биты кроме верхних 8и
оператор "или" на выходной регистр и смещение входного и выходного регистра на 8 бит на лево и на право... и так четыре раза
PUSH eax
MOV COUNTER, #0x00000004 // counter = 4;
CLR ebx // ebx=0;
Begin:
MOV TMP, еах // tmp=eax;
AND TMP, #0xFF000000 // tmp &= 0xff000000;
OR ebx, TMP // ebx |= tmp;
DEC COUNTER, #0x00000001 // counter-- ;
JUMPIFZERO End // if (counter==0 ) End;
SHL eax, 8 // eax = eax <<8;
SHR ebx, 8 // ebx = ebx >>8;
JUMP Begin // Begin:
End: POP еах
все что вы сделаете в интернете может быть использовано против вас!
#2 
Kabal патриот21.05.13 17:14
Kabal
21.05.13 17:14 
в ответ Малютка_Э 21.05.13 14:29
Только это не биты, а байты в слове, слова в двойном слове и так далее. XCHG Вам в помощь.
- Живем один раз! - Нет, мы умираем один раз. А живем мы каждый день.
#3 
viger2 коренной житель21.05.13 22:10
viger2
NEW 21.05.13 22:10 
в ответ Kabal 21.05.13 17:14
В ответ на:
XCHG Вам в помощь
.
кстати да!
все что вы сделаете в интернете может быть использовано против вас!
#4 
  Малютка_Э прохожий21.05.13 23:53
Малютка_Э
NEW 21.05.13 23:53 
в ответ viger2 21.05.13 15:20
А можно это как нибудь сделать с ror, rol или похожим?
#5 
  Малютка_Э прохожий22.05.13 01:41
Малютка_Э
NEW 22.05.13 01:41 
в ответ Малютка_Э 21.05.13 23:53
сделала с bswap. Всего три строчки основного кода.... Мда... Интересно, засчитается ли такое решение.... )
#6 
  Quo Vadis патриот23.05.13 13:10
Quo Vadis
NEW 23.05.13 13:10 
в ответ Малютка_Э 22.05.13 01:41
если вы работайте с процессором которой понимает bswap-befehl то да..засчитывается..
bswapэто x86 процессоры от intel
#7 
  Малютка_Э прохожий07.06.13 21:16
Малютка_Э
NEW 07.06.13 21:16 
в ответ Quo Vadis 23.05.13 13:10
Засчитали всё ) И теперь я даже понимаю вон тот код сверху, ноооо.. Теперь другие задания, другие ошибки :(
Спасибо всем за помощь. :)
#8 
  Quo Vadis патриот07.06.13 21:18
Quo Vadis
NEW 07.06.13 21:18 
в ответ Малютка_Э 07.06.13 21:16
а что вы учите??? техническая информатика??
#9 
  Малютка_Э прохожий07.06.13 21:21
Малютка_Э
NEW 07.06.13 21:21 
в ответ Quo Vadis 07.06.13 21:18
Нуу.. Сейчас предмет техническая информатика, да :)
#10 
  scorpi_ постоялец09.06.13 17:45
NEW 09.06.13 17:45 
в ответ Малютка_Э 21.05.13 14:29
Об эффективной манипуляции битами написана суперская книжка - Hacker's Delight
#11