Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 26

Команды логических операций, сдвигов, выделение битовых полей

15.01.2012, 13:25. Показов 7656. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Помогите пожалуйста решить задачку:
1. В исходном байте DataByte биты 0…3 содержат двоичный код, который обозначим как А, биты 4…5 - код, который обозначим как В, биты 6…7 - код, который обозна-чим как С. Вычислить А+2*В+2*С.

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

И еще одна (в принципе уже решена, но мне непонятно, почему используется команда xchg? и как решить ее же, но с помещением промежуточных результатов в стек (а надо ли оно?)
1.Вычислить значение выражения (53+8)*2 + (150-60)/3. Полученный результат записать в регистр DX. Ответ: 152.
Сама программа
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
mov ax,35h
mov bx,8h
add ax,bx
mov dx,2
mul dx
mov bx,96h
mov dx,3Ch
sub bx,dx
mov dl,3
xchg ax,bx   
div dl
add ax,bx
mov dx,ax
Добавлено через 1 час 51 минуту
понимаю что дотянул до последнего, но помогите, пожалуйста, хотя бы (самой основной) первой задачей. правда очень нужно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2012, 13:25
Ответы с готовыми решениями:

Команды логических операций, сдвигов, выделение битовых полей
В исходном байте DataByte биты 0…1 содержат двоичный код, который обозначим как А, биты 2…5 - код, который обозначим как В, биты 6…7 -...

Команды логических операций, сдвигов
Здравствуйте All. Объясните пожалуйста как решить следующую задачу: 1.В исходном байте DataByte биты 0…3 содержат двоичный код, который...

Команды логических операций и сдвигов
Задание : Даны два числа в двоичном виде. Первое число умножить на 9,второе разделить на 4,результаты логически перемножить и старшую...

13
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
15.01.2012, 14:31
Assembler
1
2
3
4
5
6
7
8
9
10
mov cl,DataByte
and cl,011000000b ; выделяем C
shr cl,5 ; умножаем на 2 (сдвиг вправо на 6 даст само число и сдвиг влево на 1 умножает на 2)
mov bl,DataByte
and bl,000110000b ; выделяем B
shr bl,3 ; умножаем на 2 (сдвиг вправо на 4 даст само число и сдвиг влево на 1 умножает на 2)
mov al,DataByte
and al,01111b ; выделяем A
add al,bl ; складываем все
add al,cl ; результат в AL
Assembler
1
2
3
4
sub bx,dx
mov dl,3
xchg ax,bx   
div dl
xchg ax,bx ; поместить результат вычитания в AX
div dl ; делим именно AX на DL (делимое всегда в AX если делитель байт)
Можно конечно использовать и стек, но действительно надо-ли ?
push bx
pop ax
0
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 26
15.01.2012, 14:54  [ТС]
Огромное спасибо за ответ! Только вот еще вопрос по поводу первой задачи: при попытке ассемблирования появляется ошибка: Аргументы неприменимы сl, DataByte
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
15.01.2012, 15:45
Вот полностью
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.model small
.data
DataByte db 010011110b ;только пример
.code
begin:
mov ax,seg databyte
mov ds,ax
mov cl,DataByte
and cl,011000000b
shr cl,5
mov bl,DataByte
and bl,000110000b
shr bl,3
mov al,DataByte
and al,01111b
add al,bl
add al,cl     
mov ax,4c00h
int 21h
end begin
0
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 26
15.01.2012, 17:24  [ТС]
к сожалению все равно не проходит ассемблирование, пишет Неправильное имя метки: .model
для проверки работоспособности программы ее нужно написать и запустить в veAsmEd, однако пока ничего не выходит
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
15.01.2012, 17:30
Это под TASM написано. Т.е. некоторые директивы будут по другому.
1
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 26
15.01.2012, 19:59  [ТС]
скажите, а решается ли первая задача через стек (с помощью команд push и pop) и как более рационально
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
15.01.2012, 20:15
Цитата Сообщение от tvincen Посмотреть сообщение
и как более рационально
Вот так:
Assembler
1
mov dx,(53+8)*2 + (150-60)/3
0
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 26
15.01.2012, 20:56  [ТС]
Цитата Сообщение от Vadimych Посмотреть сообщение
Вот так:
Assembler
1
mov dx,(53+8)*2 + (150-60)/3
я имел в виду вот эту задачу
1. В исходном байте DataByte биты 0…3 содержат двоичный код, который обозначим как А, биты 4…5 - код, который обозначим как В, биты 6…7 - код, который обозна-чим как С. Вычислить А+2*В+2*С.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.model small
.data
DataByte db 010011110b ;только пример
.code
begin:
mov ax,seg databyte
mov ds,ax
mov cl,DataByte
and cl,011000000b
shr cl,5
mov bl,DataByte
and bl,000110000b
shr bl,3
mov al,DataByte
and al,01111b
add al,bl
add al,cl     
mov ax,4c00h
int 21h
end begin
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
16.01.2012, 12:16
tvincen, можно проще
по условию DataByte=00000000ccbbaaaa, умножение на 2 это сдвиг влево на 1 разряд
Assembler
1
2
3
4
5
6
7
8
9
10
mov ax,DataByte
mov bx,ax
mov cx,ax
and ax,0000000000001111b; ax=000000000000aaaa
and cx,0000000011000000b; cx=00000000cc000000
shr cx,5;cx=000000000000cc0
and bx,0000000000110000b; bx=0000000000bb0000
shr bx,3;bx=000000000000bb0
add ax,bx
add ax,cx;ax=А+2*В+2*С
2
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 26
16.01.2012, 14:16  [ТС]
ВСЕМ большое спасибо, что помогли разобраться!
0
silf00
18.11.2012, 19:26
Задача, как озвучено в первом сообщении: "В исходном байте DataByte биты 0…3 содержат двоичный код, который обозначим как А, биты 4…5 - код, который обозначим как В, биты 6…7 - код, который обозначим как С. Вычислить А+2*В+2*С"

Я пишу её в veAsmEd (модель процессора intel 8086) и выглядит она так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
mov ax, 051h  
mov bx, ax   
mov cx, ax  
shr ax, 4  
and bx, 00001100
shr bx, 1 
and cx, 00000011
shl cx, 1
add ax, bx
add ax, cx
hlt
в результате, в ax 39, в bx 32 и в cx 2. а должно быть 5 в ax, как я понимаю. Помогите, пожалуйста!!!
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
18.11.2012, 22:39
Можно покороче, но для наглядности:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    xor ax,ax
    mov al,[DataByte]
    mov bx, ax
    mov cx, ax
    and ax, 0fh     ; A
    shr bx, 4
    and bx, 3       ; B
    shr cx, 6       ; C
    shl bx, 1       ; B*2
    shl cx, 1       ; C*2
    add ax, bx
    add ax, cx      ; ax = А+2*В+2*С
    int 20h
DataByte:
    db  51h
0
silf00
29.11.2012, 22:44
CgfcСпасибо, но проблема оказалась в том, что маску просто надо было наложить в 16-ричной СС. Может проблема и не в том была, но когда я это исправила, то все заработало. а побитовый сдвиг вообще никак не вышел( только маска(
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2012, 22:44
Помогаю со студенческими работами здесь

Команды сравнения и логических сдвигов
Всем привет. Задание: Сравнить содержимое AL с содержимым ячейки памяти 0015Н, если содержимое аккумулятора равно содержимому ячейки...

Операции со сдвигами, выделение битовых полей
Помогите, пожалуйста подкорректировать задачу во встроенном в TURBO PASCAL ассемблере: В исходном байте DataByte биты 0…1 содержат двоичный...

Выполнение битовых логических операций
Вот такой пример: // BitTest — инициируются две переменные и // выводятся результаты выполнения // операторов ~,&,| и ^ ...

Особенности битовых сдвигов
Совершаю два битовых сдвига: а) int x = 5 >> 100; б) int x = 5; printf ("%d", (unsigned) x >> 100); // Сначала выполн. приведение,...

Сравнение логических(битовых) и арифметических операторов
Полазил в интернете, но нигде точного ответа не нашёл. Так что же всё-таки быстрее(и почему?) - x / 2 или x >> 1, где и как стоит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru