Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Старый софт » Нужна помощь по 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-ом, только теория про системы счисления, регистры, сегменты и пр. Да и препод в данном случае не помощник - говорит, думайте сами, все есть в методичке. Извиняюсь, если сильно загрузил. Просто саму работу нужно сдать до вторника, а у меня сделано меньше половины. Да и тема для меня крайне новая, в первый раз стакиваюсь с подобным. Причем даже опыт программирования на 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 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 3 сентября 2011 23:26 Сообщение отредактировано: 3 сентября 2011 23:51
Читайте "методичку" ниже. Там всё вполне наглядно. http://comp-forum.ru/archive/index.php/t-741.html С ключевых слов: Команда А |
К данной теме присоединена тема "Нужна помощь по debug.exe (ассемблер)" (3 сентября 2011 23:43) |
Кай
Гость
Divine Assassin Откуда: извне (from beyond) Всего сообщений: 13709 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 сентября 2011 0:48 Сообщение отредактировано: 4 сентября 2011 0:50
По первому вопросу лабы, наверное так: Регистры общего назначения предназначены для хранения операндов арифметико-логических инструкций, а также адресов или отдельных компонентов адресов ячеек памяти. В микропроцессоре 8086 было восемь 16-разрядных регистров общего назначения. Все они могли выступать в качестве операндов основных арифметико-логических инструкций, но только четыре годились для целей адресации. Кроме того, каждый регистр имел свои специфические функции: AX — аккумулятор. Использовался для хранения операндов в командах умножения и деления, ввода-вывода, в некоторых командах обработки строк и других операциях; BX — регистр базы. Используется для хранения адреса или части адреса операнда, находящегося в памяти; CX — счётчик. Содержит количество повторений строковых операций, циклов и сдвигов; DX — регистр данных. Используется для косвенной адресации портов ввода-вывода, а также как «расширитель» аккумулятора в операциях удвоенной разрядности; SI — регистр адреса источника. Используется в строковых операциях, а также в качестве индексного регистра при обращении к операндам в памяти; DI — регистр адреса приёмника. Используется в строковых операциях, а также в качестве индексного регистра при обращении к операндам в памяти; BP — указатель кадра стека. Используется для адресации операндов, расположенных в стеке; SP — указатель стека. Используется при выполнении операций со стеком, но не для явной адресации операндов в стеке. Первые четыре регистра могут делиться на две однобайтовых части каждый: AH, BX, CH и DH для старших байтов и AL, BL, CL и DL для младших байтов. По остальным - практическое задание. Элементарное. |
UFO |
Doomer_ написал: А доку по debug'у читал? Просто в методичке не написано, как работать с debug-ом, только теория про системы счисления, регистры, сегменты и пр. Например, вот: http://kipirvine.com/asm/debug/Debug_Tutorial.pdf |
wrenchrox
Advanced Member
Inhale Откуда: Москва Всего сообщений: 1888 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 11 нояб. 2009 |
UFO написал: http://kipirvine.com/asm/debug/Debug_Tutorial.pdfСпасибо, хорошая дока. А доку по debug'у читал? Например, вот: |
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 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 сентября 2011 19:31 Сообщение отредактировано: 4 сентября 2011 20:42
Help, please. Просто это последний вопрос в моей лабораторной. И сдавать нужно во вторник. |
Sozdatel
Advanced Member
Всего сообщений: 3518 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 апр. 2010 |
Работа уже сделана, так что тему можно закрыть. |
<<Назад Вперед>> | Страницы: 1 2 | Печать |
Полигон-2 » Старый софт » Нужна помощь по debug.exe (ассемблер) |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |