Войти

Показать полную графическую версию : [решено] Задачи на ассемблере


Snake750
03-03-2010, 20:50
Доброго времени суток.Очень нуждаюсь в вашей помощи.Преподаватель задал выполнить практическую работу.Пожалуйста помогите разобраться.
Задание 1.
Даны числа а=1234h и b=4321h (числа в 16ричном системе счисления)
Нужно выполнить над ними :сложение,вычитание,конъюнкцию и дизъюнкцию.
Еще необходимо определить флаги,вот только где их посмотреть я работаю во встроенном ассемблере в Borland Delphi 7
Я сделал только не знаю правильно или нет.
Сложение: 1234h+4321h=5555h
Вычитание: 1234h-4321h=FFFF FFFF FFFF CF13
Конъюнкция : У меня результат получился 544h
Дизъюнкция : Результат 21031h.
Скажите пожалуйста правильно я сделал или нет.
Задание 2.
Записать логический и физический адрес первых 5 ячеек 13-го сегмента.
Это задание мне вообще никак не понятно,прошу если есть возможность поделитель ссылой на ресурс где это описано.
Задание 3.
Дано
Cs=2135
IP 24AD
BP=1350
DS=46A8
AX=1820
Определить адрес следующей команды.
P.S не подумайте что я прошу все решить за меня или что то на подобии.Я прошу либо объяснить на каком нибудь примере как это хотя бы делается,потому читал учебник Assembler(В.Юров) но ничего сегментацию понять не могу.
Преподаватель либо не совсем адекватный,либо сам ничего не понимает.Проблема сдачи практических у всей группы.

Admiral
04-03-2010, 01:56
Snake750
1.Сложение без вопросов.
Для вычитания формат записи ответа лучше свести до CF13 или CF13h. (h означает что число в 16ричной системе)
А вот здесь как раз весьма актуально, что нужно смотреть флаги. Так как при отнятии от меньшего большего произошёл перенос, о чём сигнализирует установка флага в 1 (на скриншоте ниже это флаг с).
Кстати, если бы было переполнение, в результате суммирования результат был больше FFFF, этот же флаг (более известен как бит переноса) точно так же бы сигнализировал про переполнение.
http://s60.radikal.ru/i170/1003/ea/899b97439ec4.png
Иллюстрация операции вычитания в Boralnd TASM
Конъюнкция - логическое "И" (AND) или логическое умножение для данных значений (1234h и 4321h) даёт другой результат - 0220h

Сначала числа переводятся в 2ричную систему исчисления
1234h -> 1001000110100 4321h ->100001100100001, далее разряд на разряд множим (отсутствие соответственного разряда у первого числа приравнивается к 0).
Если буквально - выходи 000001000100000b, или упомянутые 0220h.
Дизъюнкция - логическое "ИЛИ" (OR) или логическое сложение - 5335h
А тут ещё проще (http://www.examens.ru/otvet/11/11/916.html).

2.Например Адресация памяти в реальном режиме (http://protectmode.narod.ru/ch1_1.htm)
Адресация памяти в защищённом режиме (http://protectmode.narod.ru/ch1_2.htm)

P.S.
Для задач такого класса рекомендую почитать Абеля.
Вместо встроенного в Borland Delphi 7 ассемблера рекомендую воспользоваться Borland TASM'ом.
http://www.wasm.ru/toollist.php?list=7 (см. TASM 5+)
Там и флаги можно смотреть.

Snake750
04-03-2010, 02:05
Admiral, вы на счет задания 3 ничего подсказать не можете.вообще понять не могу что там надо сделать.

Snake750
04-03-2010, 18:28
Admiral, объясните пожалуйста как вы получили в дизъюнкции и конъюнкции такие результаты.Я проходил курс дискрентной математики,но там мы не производили операции с 16 ричными числами(в основном 0 и 1 )

Snake750
05-03-2010, 01:49
Сразу спрошу тут.Скачал TASM 5+.Разархивировал.Получил вот такую структуру:
BIN
DOC
EXAMPLE
ENCLUDE
LIB
LIBGEN
file_id.diz
l2inc12.zip
ReadMe.txt
tasm32_v5.3_exe.rar
tasmpatch_for_tasm32v5.0.zip
В каталоге BIN позапускал все exe-файлы,ни один не работает(запуск и закрытие происходит).Подскажите пожалуйста как запустить данную программу.

Admiral
05-03-2010, 12:02
Snake750 по 3му могу дать ссылку на общие сведенья
http://ru.wikipedia.org/wiki/Регистр процессора

Для проведение дизъюнкции и конъюнкции Сначала числа переводятся в 2ричную систему исчисления
1234h -> 1001000110100 4321h ->100001100100001 >> (http://forum.oszone.net/post-1360812.html#post1360812)

Программы там консольные, для начала нужно запустить консоль (Пуск->Выполнить->cmd нажать Enter) и уже там вызывать.
К сожалению тот архив не содержит 16 битные версии Tasm, Tlink и самое главное - Td, скриншот которого содержится в посте №2.
Такие файлы содержит например папка с Borland Pascal. Если последнего нету в наличии, то упомянутые файлы можно скачать отдельно, например отсюда http://faculty.kfupm.edu.sa/EE/bashar/courses/downloads.htm
Данные файлы нужно разместить в папке BIN
Для начала в блокноте набирается код ассемблерной программы.
Далее в консоли по очереди даются команды
;ассемблирование (трансляция)
\bin\tasm /zi /l <путь и имя к файлу с исходным кодом программы>.asm
;линкование
\bin\tlink /v <путь и имя к объектному файлу созданном в предыдущем шаге>.obj
;и наконец отладка
\bin\td <путь и имя к файлу программы созданном в шаге №2>.exe

Snake750
05-03-2010, 17:47
Admiral, По третьему заданию я наше только то что CS — указатель на кодовый сегмент. Связка CS:IP указывает на адрес в памяти следующей команды.
Зная что CS=2135h, IP=24ADh
Адрес следующей команды равен =2135+21AD=45E2h.
А для чего тогда даны значения регистров
BP=1350
DS=46A8
AX=1820
я не понял.Обьясните пожалуйста что с ними можно еще сделать чтобы найти адрес,или я уже нашел его?

Snake750
05-03-2010, 18:07
Записать логический и физический адрес первых 5 ячеек 13-го сегмента.
Если я правильно понял то вся память разбита на 20 разрядные сегменты в диапазоне от 00000 до FFFFF.
Мой сегмент получается будет 00013?
Тогда как определить его логический адрес?Откуда взять смешение

Snake750
07-03-2010, 00:36
Я нашел вот такой софт,посмотрите пожалуйста,то ли это что мне нужно.
Emu8086
http://www.emu8086.com/

Admiral
07-03-2010, 03:11
Snake750, не пользовался этим ПО. Судя по скриншоту и краткому описанию это то, чего можно достичь в Tasm\Tlink\Td, но через графический интерфейс.

Snake750
07-03-2010, 12:40
Admiral, ответьте пожалуйста на вышеизложенные мною вопросы.

Admiral
07-03-2010, 16:07
Snake750, ответил бы, если б знал наверняка. Все сообщения берутся к вниманию, ответ идёт если известны достоверные сведенья.
Для вопроса про сегменты таких нет.
Для вопроса про адрес команды тоже есть сомнения по поводу указания дополнительных значений.
Судя по данным Википедии, ответ на третий вопрос был найден. Значения регистров BP, AX и сегмента DS, как изначальны данные, видятся как лишние.

Snake750
07-03-2010, 17:31
Admiral, Спасибо.Теперь я еще больше убежден что преподаватель сам ничего не понимает




© OSzone.net 2001-2012