Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ПРОВЕРКА СМЕКАЛКИ! :) 
:(
    Опции темы
p0s0l
  Дата 15.10.2003, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Такую простенькую старую задачку вспомнил. Мало ли кто не знает такой простой "трюк"...
Короче:
Есть переменная var1 типа Byte.
Нужно занести эту переменную в EAX так, чтобы она "заполнила" весь этог регистр своим значением.
Т.е. если var=FF, то EAX должен стать FFFFFFFF.
Ну и понятное дело, что надо использовать минимум операций...
Кто знает - не пишите пока ответ, дайте другим помучится, просто напишите сколько операций.
А если у кого >= 4 операций, то можете и код выкладывать - всё равно не оптимальный вариант...

Я хоть и знаю ответ, но вот для примера один из "топорных" вариантов:
Код
mov al, [var1]
mov ah, al
push ax
push ax
pop eax




--------------------
С уважением, г-н Посол.
PM   Вверх
Chingachguk
Дата 15.10.2003, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Две операции


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
NightGoblin
Дата 15.10.2003, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: 1
Всего: 11



Хм... из байта в двойное слово могу минимум двумя командами smile.gif

может, где-нибудь на 4-м пне такая чудесная команда есть? smile.gif

Это сообщение отредактировал(а) 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
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 16.10.2003, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Да - 2 операции... Я кого из друганов-студентов спрашивал, дак никто так сразу не додумался...
Можете тогда говорить ответ, раз все здесь такие смекалистые. smile.gif



--------------------
С уважением, г-н Посол.
PM   Вверх
NightGoblin
Дата 16.10.2003, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: 1
Всего: 11



Код

movsx ax, byte ptr [var1]
cwde



--------------------
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
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 16.10.2003, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Мне кажется, задача была немного другая. Если бы так, то можно сделать одной командой:

Цитата

movzx  eax, byte ptr Var1


А я сделал так:

Цитата

movzx  eax, byte ptr Var1
imul eax,eax,01010101h



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
NightGoblin
Дата 16.10.2003, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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
PM MAIL WWW ICQ   Вверх
Step
Дата 16.10.2003, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: нет
Всего: 25



2 команды присвоения, умножение


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Chingachguk
Дата 16.10.2003, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

Chingachguk, хм... по-моему, надо было 0FFh превратить в 0FFFFFFFFh в EAX... так что нужен movsx, а не movzx... И еще вопрос: может ли movsx сразу байт преобразовать в двойное слово?


Ты имеешь в виду, что -1 в AL должно перейти в -1 в EAX ? Тогда да, нужно использовать знаковое расширение до Dword'а.

movsx ? Наверное !


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
NightGoblin
Дата 16.10.2003, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: 1
Всего: 11



Chingachguk, кстати, а что делает твой пример?... размножает al на 4 байта в весь eax? а что, вариант, только действительно разные задачи кроме случаев с 0FFh и 0 smile.gif


--------------------
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
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 16.10.2003, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Я имел в виду то что написал Chingachguk.
NightGoblin, извиняюсь, что привел неудачный пример, не подумал, что так можно его понять... Хотя... Хотя, по-моему, из "топорного" варианта должен был быть виден смысл...



Это сообщение отредактировал(а) p0s0l - 16.10.2003, 14:47


--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.