Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

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

Полигон-2 »   Старый софт »   Нужна помощь по debug.exe (ассемблер)
RSS

Нужна помощь по debug.exe (ассемблер)

точнее помощь в выполнении лабораторной работы по ассемблеру

<<Назад  Вперед>> Страницы: 1 2
Печать
 
Sozdatel
Advanced Member


Всего сообщений: 3518
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 апр. 2010
Собственно вчера нам задали лабораторную работу про регистры процессора 8086, при том, что нам эту еще тему не объясняли и лекций по ней еще не было.
Вчера вечером я пробовал читать методичку, которую нам выдали - "Питер Абель АССЕМБЛЕР И ПРОГРАММИРОВАНИЕ ДЛЯ IBM PC" - в принципе суть понял, но непонятно следующее, как складывать или вычитать числа в отладчике debug.
Знаю, что в ассемблере для этих целей служат команды DIV и SUB, но не понятно как реализовать это в debug .

Делаю так:
Запускаю коммандную строку cmd.exe, в ней ввожу debug.
Затем ввожу команду -r AX и задаю регистру AX значение 23.
После этого ввожу команду -r BX и задаю регистру BX значение 1.:
Проверяю регистры коммандой -r и вижу, что у регистров AX и BX изменились значения.
Затем записываю код операции сложения (01D8) в память с помощью комманды E >сегмент>:смещение:
в моем случае сперва ввожу первую половину кода операции - "01" в сегмент кода (CS) со смещением 100 (адрес относительно начала сегмента),
затем ввожу вторую половину кода операци - "D8" - со смещением 101 (адрес относительно начала сегмента).
После этого снова проверяю регистры и вижу, что уже появилась операция сложения "ADD AX,BX", но значение регистра AX так и осталось неизменным (по идее оно должно увеличиться на значение регистра BX, т.е AX=AX+BX=23+1=24).

Может кто сталкивался с подобными заданиями. Просто в методичке не написано, как работать с debug-ом, только теория про системы счисления, регистры, сегменты и пр. Да и препод в данном случае не помощник - говорит, думайте сами, все есть в методичке.

Извиняюсь, если сильно загрузил. Просто саму работу нужно сдать до вторника, а у меня сделано меньше половины. :mad:
Да и тема для меня крайне новая, в первый раз стакиваюсь с подобным. Причем даже опыт программирования на pascal и С++ в данном случае не помог.

Вот ссылки на саму лабораторную работу и "методичку":
http://narod.ru/disk/23928121001/DebugЛаб1.doc.html - лаб.работа
http://narod.ru/disk/23928119001/Abel.doc.html - методичка.
Sozdatel
Advanced Member


Всего сообщений: 3518
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 апр. 2010
"Лог" работы debug.exe:

C:\Users\Администратор>debug
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17B7 ES=17B7 SS=17B7 CS=17B7 IP=0100 NV UP EI PL NZ NA PO NC
17B7:0100 0000 ADD [BX+SI],AL DS:0000=CD
-r ax
AX 0000
:23
-r b
br Error
-r bx
BX 0000
:1
-e cx:100
^ Error
-e cs:100
17B7:0100 00.01
-e CS:101
17B7:0101 00.D8
-r
AX=0023 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17B7 ES=17B7 SS=17B7 CS=17B7 IP=0100 NV UP EI PL NZ NA PO NC
17B7:0100 01D8 ADD AX,BX
-
Кай
Гость
Divine Assassin

Откуда: извне (from beyond)
Всего сообщений: 13709
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
8 авг. 2010
Читайте "методичку" ниже. Там всё вполне наглядно.

http://comp-forum.ru/archive/index.php/t-741.html

С ключевых слов:
[q]
Команда А
Команда отладчика A (Assemble) переводит DEBUG в режим приема команд ассемблера и преобразования их в машинные коды. Установим начальный адрес следующим образом:
А 100 [Return]
Пример: Отладчик выдаст значение адреса сегмента кодов и смещения в виде xххх:0100. Теперь можно вводить каждую команду, завершая клавишей Return. Когда вся программа будет введена, нажмите снова клавишу Return для выхода из режима ассемблера. Введите следующую программу:
МOV AL,25 [Enter]
МOV BL,32 [Enter]
ADD AL,BL [Enter]
RET [Enter]
[/q]
К данной теме присоединена тема "Нужна помощь по debug.exe (ассемблер)" (3 сентября 2011 23:43)
Кай
Гость
Divine Assassin

Откуда: извне (from beyond)
Всего сообщений: 13709
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
8 авг. 2010
По первому вопросу лабы, наверное так:

Регистры общего назначения предназначены для хранения операндов арифметико-логических инструкций, а также адресов или отдельных компонентов адресов ячеек памяти.

В микропроцессоре 8086 было восемь 16-разрядных регистров общего назначения. Все они могли выступать в качестве операндов основных арифметико-логических инструкций, но только четыре годились для целей адресации. Кроме того, каждый регистр имел свои специфические функции:

AX — аккумулятор. Использовался для хранения операндов в командах умножения и деления, ввода-вывода, в некоторых командах обработки строк и других операциях;
BX — регистр базы. Используется для хранения адреса или части адреса операнда, находящегося в памяти;
CX — счётчик. Содержит количество повторений строковых операций, циклов и сдвигов;
DX — регистр данных. Используется для косвенной адресации портов ввода-вывода, а также как «расширитель» аккумулятора в операциях удвоенной разрядности;
SI — регистр адреса источника. Используется в строковых операциях, а также в качестве индексного регистра при обращении к операндам в памяти;
DI — регистр адреса приёмника. Используется в строковых операциях, а также в качестве индексного регистра при обращении к операндам в памяти;
BP — указатель кадра стека. Используется для адресации операндов, расположенных в стеке;
SP — указатель стека. Используется при выполнении операций со стеком, но не для явной адресации операндов в стеке.
Первые четыре регистра могут делиться на две однобайтовых части каждый: AH, BX, CH и DH для старших байтов и AL, BL, CL и DL для младших байтов.

По остальным - практическое задание. Элементарное.
UFO
Гость


Всего сообщений: 5443
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 дек. 2006
Doomer_ написал:
[q]
Просто в методичке не написано, как работать с debug-ом, только теория про системы счисления, регистры, сегменты и пр.
[/q]
А доку по debug'у читал?
Например, вот:
http://kipirvine.com/asm/debug/Debug_Tutorial.pdf
wrenchrox
Advanced Member
Inhale

Откуда: Москва
Всего сообщений: 1888
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
11 нояб. 2009
UFO написал:
[q]
А доку по debug'у читал? Например, вот: http://kipirvine.com/asm/debug/Debug_Tutorial.pdf
[/q]
Спасибо, хорошая дока.
Sozdatel
Advanced Member


Всего сообщений: 3518
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 апр. 2010
Спасибо за подсказки, разобрался, понял как делать. Правда осталось выполнить одно задание, на прерывания:
Вот текст:

7. Программные прерывания
Параметры для обработчика прерываний, вызываемого инструкцией INT 21, содержатся в РОН: \tAH- номер прерывания
\t\tDL-параметр для прерывания
Вывод символа на экран
Для выполнения этой операции используется прерывание 02h, ASCII -код символа в регистре DL
Выполнение последовательности инструкций
Для выполнения последовательности инструкций в сегменте кода, начиная с той, на которую указывает IP, используется команда G >смещение останова >
Эту команду нужно использовать при выполнении прерывания, чтобы избежать его трассировки.
Задание 7.
Введите код прерывания 21 со смещением 104, укажите номер прерывания 02h код символа 44h. Выполните инструкцию командой g от 104 до 106.
Попробуйте объяснить полученный результат.

Честно говоря, не совсем понимаю что требуется сделать в этом задании. Насколько я понял, нужно вывести на экран символ с ASCII кодом 44, но почему-то у меня не полуачеся это сделать, единственное что происходит, это меняется регистр AX.

Делал так. Ввел команду вывзова обработчика прерываний со смещением 105:

-e cs:104
17B8:0104 CD.CD
-e cs:105
17B8:0105 21.21
-


Затем нужно указать номер прерывания 02h, и код символа 44h. Написано, что нужно вводить их в регистры AH и DL соответственно.
А т.к на прямую, с помощью комманды -r AH или -r DL в данные регистры ничего не вводится,то пришлось вводить данные через ассемблерные комманды.
Делал это так:
" -a
17B8:0100 mov ah,02
17B8:0102 mov dl,44
17B8:0104 "

Затем ввел в регистр счетчика комманд смещение 104, как в инструкции. И начал выполнение инструкции с помощью комманды G: сперва g 104, затем g 105, после g 106. Получилось вот что:

-r ip
IP 0100
:104
-g 104

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17B8 ES=17B8 SS=17B8 CS=17B8 IP=0104 NV UP EI PL NZ NA PO NC
17B8:0104 CD21 INT 21
-g 105

AX=20CD BX=0000 CX=0013 DX=0000 SP=FFE4 BP=0000 SI=0000 DI=0000
DS=17B8 ES=17B8 SS=17B8 CS=0000 IP=0014 NV UP DI NG NZ AC PE CY
0000:0014 CC INT 3
-g 106

AX=20CD BX=0000 CX=0013 DX=0000 SP=FFE4 BP=0000 SI=0000 DI=0000
DS=17B8 ES=17B8 SS=17B8 CS=0000 IP=0014 NV UP DI NG NZ AC PE CY
0000:0014 CC INT 3
-

Самое умное что мне пришло в голову по этому поводу, это то, что регистр сегмента кода CS обнулился, а в регистр AX появилоcь значение 20CD.
Sozdatel
Advanced Member


Всего сообщений: 3518
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 апр. 2010
Help, please. Просто это последний вопрос в моей лабораторной.
И сдавать нужно во вторник.
Sozdatel
Advanced Member


Всего сообщений: 3518
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 апр. 2010
Работа уже сделана, так что тему можно закрыть.
<<Назад  Вперед>> Страницы: 1 2
Печать
Полигон-2 »   Старый софт »   Нужна помощь по debug.exe (ассемблер)
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS