Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Команды логических операций, сдвигов, Команды логических операций, сдвигов 
V
    Опции темы
Alexey68
Дата 9.3.2014, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


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

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



Здравствуйте, не могу решить следующую задачу, прошу помощи.

1.В исходном байте DataByte биты 0…3 содержат двоичный код, который обозначим как А, биты 4…5 - код, который обозначим как В, биты 6…7 - код, который обозна-чим как С. Вычислить А+2*В+2*С. 
Тест: ввод - 51h, вывод - 5.
PM MAIL   Вверх
ФедосеевПавел
Дата 10.3.2014, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alexey68 @  9.3.2014,  16:40 Найти цитируемый пост)
не могу решить

Предполагаю, что реализуешь всё самостоятельно.

При решении задачи нужно применить сдвиг вправо и битовые маски.

Например,
1) получение A: сдвиг вправо на 0 (нет сдвига) и маска 0fh (00001111b)
2) получение B: сдвиг вправо на 4 и маска 03h (00000011b)
3) получение C: сдвиг вправо на 6 и маска 03h (00000011b)

Код

A       db ?
B       db ?
C       db ?
......................
;вычисление A
        mov al, DataByte
        and al, 0fh
        mov A, al
;вычисление B
        mov al, DataByte
        mov cx, 4
        shr al, cx
        and al, 03h
        mov B, al
;вычисление C
.........................

PM   Вверх
Alexey68
Дата 10.3.2014, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


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

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



Спасибо большое Павел, вроде разобрался:
Код

_data segment
DataByte db 08Fh
A  db ?
B  db ?
_C db ?
_data ends
;1.В исходном байте DataByte биты 0…2 содержат двоичный код, 
;который обозначим как А, 
;биты 3…5 - код, который обозначим как В, 
;биты 6…7 - код, который обозначим как С. 
;Вычислить А-В+2*С. 
;Тест: ввод - 8Fh, вывод - 10 (0Ah).

_code segment
start:
mov al, DataByte
and al, 00000111b 
mov  A, al
mov al, DataByte
shr al, 03
and al, 00000001b
mov  B, al
mov al, DataByte
shr al, 06
and al, 00000010b
mov _C, al
mov eax, 2
shl eax, 1
push ax
mov al, A
sub al, B
pop cx
add ax, cx

push 0
call ExitProcess
_code ends
end start


Алексей.

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

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

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


 




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


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

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