Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2016, 11:59   #1
TunelLord
Пользователь
 
Регистрация: 22.01.2016
Сообщений: 20
По умолчанию Задача на Assembler в среде RadAsm! В переменной типа WORD биты содержать значения переменных A B C. Вычислить A*B-C

Думал задача вообще фигня , но содержание двоичного кода меня сбило с толку.
Помогите или направьте , а то засыпаю с мыслью "как же ее решить?" .

В переменной типа WORD (b15,b14,b13,...,b1,b0) биты 0...5 содержат двоичный код, который обозначает A, 6...9 обозначает B, 10...15 обозначает С. Вычислить A*B-C.
TunelLord вне форума Ответить с цитированием
Старый 06.06.2016, 12:10   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

a = word & 0x3f
b = (word >> 6) & 0xf
c = (word >> 10) & 0x3f
A*B-C
p51x вне форума Ответить с цитированием
Старый 06.06.2016, 15:39   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Для выделения битов есть команда AND.
Она сбрасывает те биты, которые в маске - нуль.
Теперь, делаешь оставшиеся биты младшими и сохраняешь получившийся байт.
Дальше - обычная арифметика..

Код:
.data
A   db  0
B   db  0
C   db  0

.code
    in    ax,40h                    ; AX - случайный WORD
    push  ax ax                     ; запомним его для В и С
    and   ax,0000000000111111b      ; оставляем в нём мл.5 битов
    mov   [A],al                    ; запомним А..

    pop   ax                        ; теперь В.
    and   ax,0000001111000000b      ; сбрасываем все, кроме битов 6..9
    shr   ax,6                      ; сдвиг АХ на 6 битов вправо
    mov   [B],al                    ; запомним В..

    pop   ax                        ; дальше С.
    and   ax,1111110000000000b      ; выделяем 6 старших битов
    shr   ax,10                     ; сдвиг АХ на 10 битов вправо (можно ROL-6)
    mov   [C],al                    ; запомним C..

    xor   ax,ax                     ; математика!
    xor   bx,bx                     ;
    mov   al,[A]                    ;
    cbw                             ;
    mul   [B]                       ; АХ = А*В
    mov   bl,[C]                    ;
    sub   ax,bx                     ; АХ = А*В-С
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 06.06.2016, 19:59   #4
TunelLord
Пользователь
 
Регистрация: 22.01.2016
Сообщений: 20
По умолчанию

Спасиб.)
Премного благодарен , выручили .
TunelLord вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Assembler в среде RadAsm! Дан массив a(n) типа WORD. Найти минимальный элемент. TunelLord Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 06.06.2016 21:56
Задача на Assembler в среде RadAsm! Известна сумма покупки (DWORD). Вычислить стоимость покупки вместе с доставкой. TunelLord Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 06.06.2016 20:01
Присвоение значения label.Caption переменной типа Integer Женя32 Общие вопросы Delphi 11 29.10.2013 14:47
Вычислить значения (assembler) Suneri Помощь студентам 0 15.01.2012 17:55
написал инсталятор на masm в среде RadASM ошибку 2 недели понять не могу Tan256 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 21.12.2010 21:54