Login
Помогите написать короткий код на ассемблере
502
NEW 21.05.13 14:29
Привет! Нужно написать код, который перевернёт биты числа! Например:
В регистре еах записано число 0x56378976. Его нужно перевернуть и записать в ebx, т.е. число 0x76893756.
Как это сделать? Уровень знаний минимальный.
Спасибо заранее :)
В регистре еах записано число 0x56378976. Его нужно перевернуть и записать в ebx, т.е. число 0x76893756.
Как это сделать? Уровень знаний минимальный.
Спасибо заранее :)
NEW 21.05.13 15:20
in Antwort Малютка_Э 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 еах
в общем я бы сначала сохранил бы содержание исходного регистра в стеке, и очистил бы выходной регистр,
а потом сделал бы цикл в котором данные копировались бы в промежуточный регистер очищались бы все биты кроме верхних 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 еах
все что вы сделаете в интернете может быть использовано против вас!
NEW 21.05.13 17:14
in Antwort Малютка_Э 21.05.13 14:29
Только это не биты, а байты в слове, слова в двойном слове и так далее. XCHG Вам в помощь.
- Живем один раз!
- Нет, мы умираем один раз. А живем мы каждый день.
NEW 21.05.13 22:10
кстати да!
in Antwort Kabal 21.05.13 17:14
В ответ на:
XCHG Вам в помощь
.XCHG Вам в помощь
кстати да!

все что вы сделаете в интернете может быть использовано против вас!
21.05.13 23:53
in Antwort viger2 21.05.13 15:20
А можно это как нибудь сделать с ror, rol или похожим?
NEW 22.05.13 01:41
in Antwort Малютка_Э 21.05.13 23:53
сделала с bswap. Всего три строчки основного кода.... Мда... Интересно, засчитается ли такое решение.... )
NEW 23.05.13 13:10
in Antwort Малютка_Э 22.05.13 01:41
если вы работайте с процессором которой понимает bswap-befehl то да..засчитывается..
bswapэто x86 процессоры от intel
bswapэто x86 процессоры от intel
NEW 07.06.13 21:16
in Antwort Quo Vadis 23.05.13 13:10
Засчитали всё ) И теперь я даже понимаю вон тот код сверху, ноооо.. Теперь другие задания, другие ошибки :(
Спасибо всем за помощь. :)
Спасибо всем за помощь. :)
NEW 07.06.13 21:21
in Antwort Quo Vadis 07.06.13 21:18
Нуу.. Сейчас предмет техническая информатика, да :)
NEW 09.06.13 17:45
in Antwort Малютка_Э 21.05.13 14:29