Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Команды and и shr(L) 
:(
    Опции темы
klyxa
Дата 5.6.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

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



Народ. Объясните плиз пример этот
Код

_BCD   db      25h ;упакованное BCD-число
s_ch    dw      0 ;место для результата
...
        xor     ax,ax   ;очистка ax
        mov     al,u_BCD
        shl     ax,4    ;ax=0250
        mov     al,u_BCD        ;ax=0225
;преобразование в символьное представление:
        and     ax,3f3fh        ;ax=3235h
        mov     s_ch,ax


Мне вот не понятно почему 0025h после сдвига влево на 4 разряда стало 0250h поидее вабще 0000, т.к. там замещяется нулями разряды,но 0025 и конечное 0000 как то не вяжется..объясните пожалуйста - как там происходит сдвиг.

И еще вот сие
        and     ax,3f3fh   ; and ипользуется для логического умножения 2ух операндов..т.е. 0225*(логичски)3f3f...
Ааа, мб это типа в 2оичной сситеме умножение происходит?=) А то так посмотришь,что то никак не выходит 1 или 0

0000 0010 0010 0101
*
0011 1111 0011 1111
__________________
0000 0100 0010 0101

т.о. "0425" ...омг..у меня чё то не то вышло. поправте плиз. а то я не особо еще с асмой сдружился



PM MAIL   Вверх
DigitSphinx
Дата 5.6.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2^4=16
Т.е. ты умножаешь на 16 поэтому и сдвиг на 1 разряд !
Цитата(klyxa @  5.6.2007,  12:11 Найти цитируемый пост)

0000 0010 0010 0101
*
0011 1111 0011 1111
__________________
0000 0100 0010 0101

0000 0010 0010 0101
*
0011 1111 0011 1111
__________________
0000 0010 0010 0101
Нет ответ будет 0225 т.е. 1000100101 на калькуляторе проверь
У тебя нолик лишний !



--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
klyxa
Дата 5.6.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

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



"2^4=16
Т.е. ты умножаешь на 16 поэтому и сдвиг на 1 разряд !"

т.е.
Код

shl     ax,4

4 - это степень в которую надо возвести 2?..а почему если 16,то на 1 разряд?

вот ще пример
Код

 mov AL,7
shr AL,1 ;AL=3, CF=1


7 - 0111
shr - сдвиг побитово вправо,т.е. 0011,т.е. 3
А вот с первым примером какаято херь невнятная. ЛАдно бы там rol был. Еще всё доступно,но вот чтобы в степеь и далее..Объясни плиз,как ты так лихо? smile

"Нет ответ будет 0225 т.е. 1000100101 на калькуляторе проверь
У тебя нолик лишний !"

А зачем тогда мы делали

Код

 and     ax,3f3fh 


Если получилось то, что было. Или тут тоже какойто скрытый смысел?сори за тупость,если таковая присутствует.Но..хочу всё знать!=)

PM MAIL   Вверх
DigitSphinx
Дата 5.6.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я сам тока начал изучать asm !
На счет shl я не уверен , действительно хрень !
На счет “&” логического И:
Операция не имеет отношение к умножению !
Называется Конъюнкция, у логических операторов есть таблицы истинности , у логического И
A    |    B    |    A&B
0         0           0
0         1           0
1         0           0
1         1           1
Т.е. только когда оба операнда положительны то и результат положительный
0000 0010 0010 0101
*
0011 1111 0011 1111
__________________
0000 0010 0010 0101

Другой пример

0000 0010 0010 0101
*
0011 1101 0011 1011
__________________
0000 0000 0010 0001

Добавлено через 11 минут и 17 секунд
Да кстати с shl и shr вроде логично
25h = 37d = 100101b
Сдвигаем 100101 на 4 разряда влево получаем 1001010000
1001010000b = 592d = 250h

7h = 7d = 0111b
Сдвигаем на разряд вправо получаем 011,1 = 3,5d = 3.8h
Но единичка после запятой откидывается и получаем 011 = 3d  =3h

Добавлено через 14 минут и 10 секунд
Короче все сдвиги в 2-ой системе счисления !

Это сообщение отредактировал(а) DigitSphinx - 5.6.2007, 14:45


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
klyxa
Дата 5.6.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

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



"Команда and используется для логического умножения двух операндов. Результат операции помещается по адресу первого операнда. Эту команду удобно использовать для принудительной установки или сброса определенных битов операнда. "

Код

;Пример. Надо в числе 11111111 обнулить 2, 3 и 6 биты.
mov ax,11111111b
and ax,10110011b



Ну не суть..меня интересует когда они получали символ нажатой клавиши(или что там) с помощью 

Код

;преобразование в символьное представление:
        and     ax,3f3fh        ;ax=3235h
; and     ax{0225h},3f3fh  как получается 3235


Мы же вроде считали сейчас. получалось 0225,но уж никак не 3235h. Меня вот сие интерисует.и srl тоже=)
PM MAIL   Вверх
DigitSphinx
Дата 5.6.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(klyxa @  5.6.2007,  14:59 Найти цитируемый пост)
;Пример. Надо в числе 11111111 обнулить 2, 3 и 6 биты.
mov ax,11111111b
and ax,10110011b

 smile 
Номера битов с права на лево !
Еще раз : я полный нуб по asm’у !
Я отвечал на вопрос по мат. Логике !

Добавлено @ 15:15
Кстати если разбираешся в asm’е ответь на мой вопрос 
Тема называется “В асме 1-ый раз , что не так с выводом, Не могу вывести строку !”
Она вторая после твоей  smile 

Это сообщение отредактировал(а) DigitSphinx - 5.6.2007, 15:25


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
dumb
Дата 5.6.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

Репутация: 4
Всего: 158



Цитата(klyxa @  5.6.2007,  14:59 Найти цитируемый пост)
"Команда and используется для логического умножения двух операндов. Результат операции помещается по адресу первого операнда. Эту команду удобно использовать для принудительной установки или сброса определенных битов операнда. "

откуда читата?
а. нашел. Юров. короче, Витя Юров - тоже человек, и ему тоже(как и всем другим человекам) свойственно ошибаться...
для "принудительной установки" определенных битов команда and использоваться не может, и это очевидно. для "принудительной установки" используется команда or.
причем, похоже, это не опечатка, а именно ошибка, так как пример использования написан с описанной "корявой" логикой.
Цитата

_BCD   db      25h ;упакованное BCD-число
s_ch    dw      0 ;место для результата
...
        xor     ax,ax   ;очистка ax
        mov     al,u_BCD
        shl     ax,4    ;ax=0250
        mov     al,u_BCD        ;ax=0225
;преобразование в символьное представление:
        and     ax,3f3fh        ;ax=3235h ax=0225, обидно, да? smile
        mov     s_ch,ax


а теперь внимание, правильный ответ:
Код

_BCD   db      25h ;упакованное BCD-число
s_ch    dw      0 ;место для результата
...
        xor     ax,ax   ;очистка ax
        mov     al,u_BCD
        shl     ax,4    ;ax=0250
        mov     al,u_BCD        ;ax=0225
;преобразование в символьное представление:
        and     ax,0f0fh        ;ax=0205
        or      ax,3030h        ;ax=3235
        mov     s_ch,ax

PM MAIL   Вверх
klyxa
Дата 5.6.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

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



";ax=3235h ax=0225, обидно, да? smile"

алилуя!!! спасибо большое =))
PM MAIL   Вверх
Mikl__
Дата 6.6.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 18.5.2007

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



Может быть я смогу объяснить понятнее
_BCD   db      25h ;упакованное BCD-число
необходимо превратить в код '25' коды чисел ASCII '0'- 30h '1'-31h ... '8' - 38h '9'-39h
чтобы преобразовать упакованное число 0025h цифры необходимо раздвинуть 0205h, а затем сложить с 3030h
тогда мы получим 3235h или код '25'
        mov     ah,u_BCD;ax=25XX
        shr    ax,4    ;ax=025X
после этого должно быть 
        shr     al,4        ;ax=0205
;преобразование в символьное представление:
        add     ax,3030h        ;ax=3235h
        mov     s_ch,ax



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

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

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


 




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


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

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