Изучение работы микропроцессора с помощью Турбо Отладчика (Borland Turbo Debugger)
Турбо Отладчик (входящий в состав среды Borland C++) позволяет прослеживать выполнение инструкций ассемблера, содержимое ячеек оперативной памяти и регистров процессора и математического сопроцессора [58]. Он также позволяет отлаживать программы на языках Си и Паскаль. Общий вид команды запуска отладчика TD opt name args где opt – опции, name – имя запускаемой программы, args – ее аргументы. Задания 1.Запустите отладчик щелчком по файлу td.exe из папки BIN (без опций, имени программы и аргументов. Нажмите клавишу F5 для увеличения размера экрана. При вызове отладчика без указания имени файла на экране появляется визитная карточка программы (рис. 2.15, для ее снятия щелкните ОК или нажмите клавишу Esc) и окно процессора (CPU), содержащее команды ассемблера. Окно процессора состоит из пяти рамок, в которых выводятся: команды программы, данные выбранной области памяти в символьном и шестнадцатиричном виде, содержимое регистров процессора, содержимое стека процессора, а также биты регистра флажков. В верхней строке указан определенный программой тип процессора. Знак в виде стрелки вправо выделяет команду, которая будет выполнена следующей. В верхней строке рамки, содержащей команды, указываются адрес памяти и значения величины, указанной по этому адресу. Для перехода в главное меню программы можно использовать клавишу F10.
Рис. 2.15. Стартовое окно Турбо Отладчика
Выполните команду File-Open, укажите путь к ехе-файлу, полученному в первом примере (greet2.exe, рис. 2.16), щелкните ОК. В окне с надписью Program has no symbol table щелкните ОК, найдите команды программы (рис. 2.17).
Рис. 2.16. Выбор исполняемого файла для загрузки в Турбо Отладчик
Рис. 2.17. Программа в Турбо Отладчике
Спустите выделение на вторую строку, выполните команду Run-Go to cursor или просто нажмите клавишу F4, рис 2.18. В окне данных (справа) произойдет изменение содержимого регистра ах – в него будет занесено значение адреса сегмента Data (в данном случае это шестнадцатиричное число 61С7, в других случаях оно может быть иным). Одновременно изменилось содержимое регистра ip с адресом следующей выполняемой команды.
Рис. 2.18. Выполнение первой команды программы в Турбо Отладчике
Выделите третью строку, нажмите клавишу F4. В окне данных (справа) произойдут изменения – в регистр ds будет помещено содержимое регистра ах, изменится и содержимое регистра ip (рис. 2.19).
Рис. 2.19. Выполнение второй команды программы в Турбо Отладчике
Выделите пятую строку, нажмите клавишу F4. В окне данных (справа) произойдет изменение содержимого старшего регистра байта ах – в него будет занесено значение 09, изменится и содержимое регистра ip (рис. 2.20). Выделите восьмую строку (последнюю команду программы), нажмите клавишу F4. Появится сообщение об успешном завершении программы, содержимое регистра ip обнулится.
Рис. 2.20. Выполнение четвертой команды программы в Турбо Отладчике Задания: 1. Введите следующую программу (комментарии не набирать): ; Turbo Assembler Copyright (c) 1988, 1991 By Borland International, Inc. ; HELLO2.ASM - Editted version of HELLO.ASM. ; Display greeting after accepting input. ; From the Turbo Assembler Users Guide - Getting started DOSSEG .MODEL SMALL .STACK 100h .DATA TimePrompt DB 'Is it after 12 noon (Y/N)?$' GoodMorningMessage LABEL BYTE DB 13,10,'Good morning, world!',13,10,'$' GoodAfternoonMessage LABEL BYTE DB 13,10,'Good afternoon, world!',13,10,'$' .CODE mov ax,@data mov ds,ax ;set DS to point to the data segment mov dx,OFFSET TimePrompt ;point to the time prompt mov ah,9 ;DOS print string function int 21h ;display the time prompt mov ah,1 ;DOS get character function int 21h ;get a single-character response cmp al,'y' ;typed lowercase y for after noon? jz IsAfternoon ;yes, it's after noon cmp al,'Y' ;typed uppercase Y for after noon? jnz IsMorning ;no, it's before noon IsAfternoon: mov dx,OFFSET GoodAfternoonMessage ;point to the afternoon greeting jmp DisplayGreeting IsMorning: mov dx,OFFSET GoodMorningMessage ;point to the before noon greeting DisplayGreeting: mov ah,9 ;DOS print string function int 21h ;display the appropriate greeting mov ah,4ch ;DOS terminate program function int 21h ;terminate the program END
В данной программе присутствуют два очень важных средства: возможность ввода и принятие решений. Эта программа запрашивает у вас, является ли вводимое время временем после полудня (Is it after 12 noon (Y/N)?), воспринимая ответ (один символ) с клавиатуры. Если таким ответом будет буква Y в верхнем или нижнем регистре (что означает ответ ДА), то программа выводит сообщение "Good afternoon, world!" - "Добрый день!", в противном случае выводится сообщение "Good morning, world" - "Доброе утро!". В данной программе имеются все основные элементы полезной программы: ввод из информации внешней среды, обработка данных и принятие решения. Сохраните эту программу на диске, ассемблируйте и скомпонуйте программу, как в предыдущем примере. После запуска программы выведется сообщение на английском языке, приведем его перевод: "Is it after 12 noon (Y/N)? " (Это время после полудня? (ДА/НЕТ) - [Y/N]). Курсор будет мерцать у последнего символа в ожидании ввода ответа. Нажмите Y. Программа ответит: "Good afternoon, world!" Повторите запуск программы, введите “N”. Аналогично первому примеру проследите за выполнением команд программы в Турбо Отладчике.
2. Введите следующую программу REVERSE.ASM (комментарии не набирать): ; Turbo Assembler Copyright (c) 1988, 1991 By Borland International, Inc. ; REVERSE.ASM - Prints a string in reverse ; From the Turbo Assembler Users Guide - Getting started DOSSEG .MODEL SMALL .STACK 100h .DATA MAXIMUM_STRING_LENGTH EQU 1000 StringToReverse DB MAXIMUM_STRING_LENGTH DUP(?) ReverseString DB MAXIMUM_STRING_LENGTH DUP(?) .CODE mov ax,@data mov ds,ax ;set DS to point to the data segment mov ah,3fh ;DOS read from handle function mov bx,0 ;standard input handle mov cx,MAXIMUM_STRING_LENGTH ;read up to maximum number of characters mov dx,OFFSET StringToReverse ;store the string here int 21h ;get the string and ax,ax ;were any characters read? jz Done ;no, so you're done mov cx,ax ;put string length in CX, where ; you can use it as a counter push cx ;save the string length mov bx,OFFSET StringToReverse mov si,OFFSET ReverseString add si,cx dec si ;point to the end of the ; reverse string buffer ReverseLoop: mov al,[bx] ;get the next character mov [si],al ;store the characters in reverse order inc bx ;point to next character dec si ;point to previous location in reverse buffer loop ReverseLoop ;move next character, if any pop cx ;get back the string length mov ah,40h ;DOS write from handle function # mov bx,1 ;standard output handle mov dx,OFFSET ReverseString ;print this string int 21h ;print the reversed string Done: mov ah,4ch ;DOS terminate program function # int 21h ;terminate the program END Выполните команды компиляции и компоновки. В случае вывода при ассемблировании сообщений об ошибках, внимательно проверьте исходный код, сравните его с приведенным текстом, а затем попытайтесь повторить процесс. После запуска программы на экране останется мерцающий курсор - программа ожидает ввода. Попробуйте ввести: ABCDEFG а затем нажмите клавишу ENTER. Программа выведет на экран: GFEDCBA и завершит работу. Еще раз запустите программу, введите: и нажмите клавишу ENTER. Программа выведет на экран: Программа REVERSE.ASM изменяет порядок символов во введенной строке на обратный. Аналогично первому примеру проследите за выполнением команд программы в Турбо Отладчике.
Популярное: Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (621)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |