![]() |
|
|
![]()
|
|
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Такую простенькую старую задачку вспомнил. Мало ли кто не знает такой простой "трюк"...
Короче: Есть переменная var1 типа Byte. Нужно занести эту переменную в EAX так, чтобы она "заполнила" весь этог регистр своим значением. Т.е. если var=FF, то EAX должен стать FFFFFFFF. Ну и понятное дело, что надо использовать минимум операций... Кто знает - не пишите пока ответ, дайте другим помучится, просто напишите сколько операций. А если у кого >= 4 операций, то можете и код выкладывать - всё равно не оптимальный вариант... Я хоть и знаю ответ, но вот для примера один из "топорных" вариантов:
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Две операции
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: 1 Всего: 11 |
Хм... из байта в двойное слово могу минимум двумя командами
может, где-нибудь на 4-м пне такая чудесная команда есть? Это сообщение отредактировал(а) NightGoblin - 15.10.2003, 21:20 -------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Да - 2 операции... Я кого из друганов-студентов спрашивал, дак никто так сразу не додумался...
Можете тогда говорить ответ, раз все здесь такие смекалистые. -------------------- С уважением, г-н Посол. |
|||
|
||||
| NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: 1 Всего: 11 |
-------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
| Chingachguk |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Мне кажется, задача была немного другая. Если бы так, то можно сделать одной командой:
А я сделал так:
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||
|
|||||
| NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: 1 Всего: 11 |
Chingachguk, хм... по-моему, надо было 0FFh превратить в 0FFFFFFFFh в EAX... так что нужен movsx, а не movzx... И еще вопрос: может ли movsx сразу байт преобразовать в двойное слово?
p0s0l, или я чего-то недопонял? Это сообщение отредактировал(а) NightGoblin - 16.10.2003, 09:31 -------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
2 команды присвоения, умножение
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Ты имеешь в виду, что -1 в AL должно перейти в -1 в EAX ? Тогда да, нужно использовать знаковое расширение до Dword'а. movsx ? Наверное ! -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: 1 Всего: 11 |
Chingachguk, кстати, а что делает твой пример?... размножает al на 4 байта в весь eax? а что, вариант, только действительно разные задачи кроме случаев с 0FFh и 0
-------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Я имел в виду то что написал Chingachguk.
NightGoblin, извиняюсь, что привел неудачный пример, не подумал, что так можно его понять... Хотя... Хотя, по-моему, из "топорного" варианта должен был быть виден смысл... Это сообщение отредактировал(а) p0s0l - 16.10.2003, 14:47 -------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |