| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Команды and и shr(L) |
| Автор: klyxa 5.6.2007, 12:11 | ||
Народ. Объясните плиз пример этот
Мне вот не понятно почему 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" ...омг..у меня чё то не то вышло. поправте плиз. а то я не особо еще с асмой сдружился |
| Автор: klyxa 5.6.2007, 14:18 | ||||||
| "2^4=16 Т.е. ты умножаешь на 16 поэтому и сдвиг на 1 разряд !" т.е.
4 - это степень в которую надо возвести 2?..а почему если 16,то на 1 разряд? вот ще пример
7 - 0111 shr - сдвиг побитово вправо,т.е. 0011,т.е. 3 А вот с первым примером какаято херь невнятная. ЛАдно бы там rol был. Еще всё доступно,но вот чтобы в степеь и далее..Объясни плиз,как ты так лихо? "Нет ответ будет 0225 т.е. 1000100101 на калькуляторе проверь У тебя нолик лишний !" А зачем тогда мы делали
Если получилось то, что было. Или тут тоже какойто скрытый смысел?сори за тупость,если таковая присутствует.Но..хочу всё знать!=) |
| Автор: DigitSphinx 5.6.2007, 14:45 |
| Я сам тока начал изучать 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-ой системе счисления ! |
| Автор: klyxa 5.6.2007, 14:59 | ||||
"Команда and используется для логического умножения двух операндов. Результат операции помещается по адресу первого операнда. Эту команду удобно использовать для принудительной установки или сброса определенных битов операнда. "
Ну не суть..меня интересует когда они получали символ нажатой клавиши(или что там) с помощью
Мы же вроде считали сейчас. получалось 0225,но уж никак не 3235h. Меня вот сие интерисует.и srl тоже=) |
| Автор: DigitSphinx 5.6.2007, 15:07 | ||
Номера битов с права на лево ! Еще раз : я полный нуб по asm’у ! Я отвечал на вопрос по мат. Логике ! Добавлено @ 15:15 Кстати если разбираешся в asm’е ответь на мой вопрос Тема называется “В асме 1-ый раз , что не так с выводом, Не могу вывести строку !” Она вторая после твоей |
| Автор: dumb 5.6.2007, 15:53 | ||||||
откуда читата? а. нашел. Юров. короче, Витя Юров - тоже человек, и ему тоже(как и всем другим человекам) свойственно ошибаться... для "принудительной установки" определенных битов команда and использоваться не может, и это очевидно. для "принудительной установки" используется команда or. причем, похоже, это не опечатка, а именно ошибка, так как пример использования написан с описанной "корявой" логикой.
а теперь внимание, правильный ответ:
|
| Автор: klyxa 5.6.2007, 15:57 |
| ";ax=3235h ax=0225, обидно, да? smile" алилуя!!! спасибо большое =)) |
| Автор: Mikl__ 6.6.2007, 10:53 |
| Может быть я смогу объяснить понятнее _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 |