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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2010, 20:28   #1
Ra88
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 21
По умолчанию Реализовать логическую арифметику

Задача:
Реализуйте логическую арифметику, при которой в одном байте хранилось бы 8 логических переменных. (сделать надо ассемблерной вставкой)
Задача мне кажется не сложной, но не могу понять , что конкретно надо сделать?!? Думаю, что нужно 8 раз запросить логическую переменную (т.е. 1 или 0) и логическими оперциями поочерёдно слева или справа запихнуть в один байт. Я прав товарищи или нет?
Ra88 вне форума Ответить с цитированием
Старый 04.10.2010, 23:17   #2
Vergo
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 38
По умолчанию

Видимо нужно написать процедуры записи и чтения информации из этих переменных

Посмотри директиву RECORD. Она как раз предназначена для работы с битовыми полями. На ее примере (или с помощью нее) попробуй реализовать свой интерфейс.
Там все делается через маски и сдвиги.

P.s.: Если это то самое, то могу даже подсказать литературу. "Том Сван. Освоение Turbo Assembler". Там подробно расписаны операции с битовыми полями (стр. 146 и далее).

Последний раз редактировалось Vergo; 04.10.2010 в 23:26.
Vergo вне форума Ответить с цитированием
Старый 05.10.2010, 03:49   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Ra88
1 байт == 8 битов в каждом бите 1 логическая переменная, которые пронумерованы от 0 до 7
допустим для 8 логических переменных отвели переменную FLAG
.data
FLAG db ?
установить 5-ую логическую переменную: OR FLAG,00100000b
сбросить 3-ью логическую переменную: AND FLAG,11110111b
переключить значение (0->1 или 1->0) в 1-ой логической переменной: XOR FLAG,00000010b
проверить значение в 7-ой логической переменной: TEST FLAG,1000000b
если ZF=1 в 7-ой логической переменной 0, если ZF=0 в 7-ой логической переменной 1
вроде бы и всё!

Последний раз редактировалось Mikl___; 05.10.2010 в 03:52.
Mikl___ вне форума Ответить с цитированием
Старый 05.10.2010, 08:29   #4
Ra88
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Ra88
1 байт == 8 битов в каждом бите 1 логическая переменная, которые пронумерованы от 0 до 7
допустим для 8 логических переменных отвели переменную FLAG
.data
FLAG db ?
установить 5-ую логическую переменную: OR FLAG,00100000b
сбросить 3-ью логическую переменную: AND FLAG,11110111b
переключить значение (0->1 или 1->0) в 1-ой логической переменной: XOR FLAG,00000010b
проверить значение в 7-ой логической переменной: TEST FLAG,1000000b
если ZF=1 в 7-ой логической переменной 0, если ZF=0 в 7-ой логической переменной 1
вроде бы и всё!
ээээмммм...Тоесть Mikl___, исходя из этого я должен сделать следующую форму: на которой присутствует 2 поля ввода (для номера позиции логической переменной и самой логической переменной) а также 3 кнопки: "установить","сбросить", "переключить". Я правильно понял? Хотя и не понял почему так , а проверка зачем?
Ra88 вне форума Ответить с цитированием
Старый 05.10.2010, 08:45   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а проверка зачем?
смотрите, вот есть обыкновенная переменная.
var
BB : boolean;

вы можете установить (присвоить) ей значение:
BB := что_то логическое...

а можете проверить / получить величину, сохранённую в этой переменной:
if BB then ....

вот Вам нужно сделать так, чтобы в одной переменной типа байт
хранилось 8 переменных логического типа.
А Вам нужно написать две функции (или процедуры):
одна, которая присваивает заданному биту значение true или false
и другая, которая получает (извлекает) из заданного бита сохранённую там величину.

А какой интерфейс Вы придумаете, чтобы это продемонстрировать - это, имхо, неважно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.10.2010, 09:07   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Ra88
первый вариант звучал так: Задача: Реализуйте логическую арифметику, при которой в одном байте хранилось бы 8 логических переменных.

во-втором варианте уже появилась форма "на которой присутствует 2 поля ввода (для номера позиции логической переменной и самой логической переменной) а также 3 кнопки: "установить","сбросить", "переключить". Я правильно понял?"

Не корректно начали описание задачи, я же не знаю, что вам задали. Если с формой, то у вас должно быть восемь элементов типа "лампочка" причем какая из них "включена" -- это должн быть результат функции RANDOM(255), где 0 -- это выключены все, 255 -- включены все и каждый двоичный разряд соответствует одной "лампочке" (1=горит 0-ая лампочка, 2=горит 1-ая лампочка, 4=2-ая лампочка, 8=3-ая лампочка,...,128=7-ая лампочка) и далее четыре кнопки (при нажатии на кнопку реализуются функции AND, OR, XOR, TEST) и одно поле ввода для номера лампочки #. Надписи на кнопках следующие:
1) выключить лампочку #
2) включить лампочку #
3) если включена, то выключить / если выключена, то включить лампочку #
4) включена ли лампочка #?
рядом с четвертой клавишей загорается панель с надписью Да/Нет

Последний раз редактировалось Mikl___; 05.10.2010 в 11:16.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
на длинную арифметику Figushkin Помощь студентам 3 04.06.2010 08:48
Помогите решить логическую задачу!!! mustafa1453 Помощь студентам 10 16.07.2008 23:23
Помогите составить ER диаграму (логическую модель) hecz Помощь студентам 3 15.05.2008 18:37