рефераты

Рефераты

рефераты   Главная
рефераты   Краткое содержание
      произведений
рефераты   Архитектура
рефераты   Астрономия
рефераты   Банковское дело
      и кредитование
рефераты   Безопасность
      жизнедеятельности
рефераты   Биографии
рефераты   Биология
рефераты   Биржевое дело
рефераты   Бухгалтерия и аудит
рефераты   Военное дело
рефераты   География
рефераты   Геодезия
рефераты   Геология
рефераты   Гражданская оборона
рефераты   Животные
рефераты   Здоровье
рефераты   Земельное право
рефераты   Иностранные языки
      лингвистика
рефераты   Искусство
рефераты   Историческая личность
рефераты   История
рефераты   История отечественного
      государства и права
рефераты   История политичиских
      учений
рефераты   История техники
рефераты   Компьютерные сети
рефераты   Компьютеры ЭВМ
рефераты   Криминалистика и
      криминология
рефераты   Культурология
рефераты   Литература
рефераты   Литература языковедение
рефераты   Маркетинг товароведение
      реклама
рефераты   Математика
рефераты   Материаловедение
рефераты   Медицина
рефераты   Медицина здоровье отдых
рефераты   Менеджмент (теория
      управления и организации)
рефераты   Металлургия
рефераты   Москвоведение
рефераты   Музыка
рефераты   Наука и техника
рефераты   Нотариат
рефераты   Общениеэтика семья брак
рефераты   Педагогика
рефераты   Право
рефераты   Программирование
      базы данных
рефераты   Программное обеспечение
рефераты   Промышленность
      сельское хозяйство
рефераты   Психология
рефераты   Радиоэлектроника
      компьютеры
      и перифирийные устройства
рефераты   Реклама
рефераты   Религия
рефераты   Сексология
рефераты   Социология
рефераты   Теория государства и права
рефераты   Технология
рефераты   Физика
рефераты   Физкультура и спорт
рефераты   Философия
рефераты   Финансовое право
рефераты   Химия - рефераты
рефераты   Хозяйственное право
рефераты   Ценный бумаги
рефераты   Экологическое право
рефераты   Экология
рефераты   Экономика
рефераты   Экономика
      предпринимательство
рефераты   Юридическая психология

 
 
 

Отладчик

Отладчик Periscopе является удобным средством отладки программно-
го кода. Он полностью написан на языке ассемблера поэтому обладает
большим быстродействием. В нем имеется возможность использования при отладке символических
имен (имен из программы ) вместо адресов. Для некоторых компиляторов
выводятся также номера строк исходного кода и сам исходный код. Для обеспечения надежной работы при отладке программ Periscope
обладает средствами защиты от сбоев: - На входе сохраняются вектора BIOS, используемые Periscope. С целью обеспечить надежность Periscope затем изменяет эти прерывания, устанавливая значения, записанные в ПЗУ. На выходе из Periscope программные вектора восста- навливаются. - Periscope использует прерывания BIOS для всех функций, кроме функций, связанных с файлами, поэтому Periscope не мо- жет вызвать DOS, если DOS уже активна. Использование BIOS позволяет вам трассировать DOS. - Переключатель прерывания действует даже в том случае, когда прерывания заблокированы. Активные прерывания от тайме- ра и клавиатуры обнаруживаются и обрабатываются Peris- cope. При необходимости клавиатура также сбрасывается. - Если это возможно, Periscope восстанавливает состояние сис- темы так, чтобы это не повлияло на прерванную програм- му. Исходный буфер клавиатуры и управляющие буфера CRT сохраняются на входе в Periscope и восстанавливаются на выходе.
При работе с Periscope предоставляются следующие возможности: - Определять окна для информации о Данных, Регистрах, Стеке и(или) результате Дисассемблирования. Вы в любой момент можете выбрать размер окон и содержание отображаемой информации. Можно определить до 4 окон Данных! - Отобразить память в форматах ASCII, байта, целого, целого со знаком, слова, двойного слова, короткого вещественного, длинного вещественного и ASCIIZ. - Отобразить блок памяти по отдельным полям записи. Например, можно отобразить Префикс Программного Сегмента так, что каждое поле будет помечено и будет расположено на от- дельной строке. Вы можете определить записи так, как это Вам нужно. - Просмотреть текстовый файл из Periscope. - В интерактивном режиме добавлять и изменять определения имен.
В лабораторной работе были использованы следующие команды Periscope: \D Синтаксис: D [] Использование: Отображает блок памяти в текущем формате вывода. Пример: 'D 100' отображает память, начиная со смещения 100H. \DA Синтаксис: DA [] Использование: Отображает блок памяти в ASCII. Пример: 'DA FILE' отображает имя FILE в ASCII. \J Синтаксис: J Использование: Выполняет до следующей команды на том же уровне. Пример: 'J' выполняет текущую команду и возвращает управление следующей команде. \JN Синтаксис: JN Использование: Переход к следующей команде без замены изобра- жения на экране. Пример: 'JN' выполняет текущую команду без замены изображения на экране. \T Синтаксис: T [] Использование: Трассирует выполнение текущей программы по одной команде. Пример: 'T 5' трассирует 5 команд. МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РФ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ ( технический университет ) к а ф е д р а ЭВА О Т Ч Е Т по лабораторной работе " Отладчик Periscope " дисциплина: Cистемное ПО ПЭВМ Выполнили студенты группы С-45 Преподаватель: Зарудный Д. И. Москва 1998 г.
Программа   ERROR.ASM
      Сначала вводится десятичное число, затем
программа
      его должна вывести на экран.
      Работает только для однозначных чисел.
=========================================
MODEL
TINY
.CODE
org
100h
print
macro str
      mov ah,9
      lea dx,str
      int 21h    
endm
start:
      push cs
      pop ds
      print mes1
      call inint
      call outint
konets:
mov ax,4c00h
      int 21h
outint
proc near
      push cx
      push dx
      push ax
      push bx
      xor cx,cx
      mov bx,10
      xor dx,dx
del: div bx
      inc cx
      push dx
      cmp ax,0
      jne del
      mov ah,2
vvv:  pop dx
      add dl,30h
      int 21h
      loop vvv
      pop bx
      pop ax
      pop dx
      pop cx
       ret
outint
endp
inint proc near
      push bx
      push dx
      xor dx,dx
      xor ax,ax
fgh:  push ax
      mov ah,1
      int 21h
      cmp al,13
      je jkl
      sub al,30h
      mov dl,al
      mov bx,10
      pop ax
      push dx
      mul bx
      cmp dx,0
      jne error
      pop dx
      add ax,dx
      jmp fgh
jkl:  print nline
      pop ax
      pop dx
      pop bx
      ret
error:
print errs
      mov ax,4c01h
      int 21h
inint
endp
mes1 db
'Введите число: $'
nline
db 13,10,'$'
errs db
'error?$'
END
start
=========================================
      Исправленный вариант программы. Выводит
числа правильно.
=========================================
model
tiny
.code
      org 100h
begin:
      push cs
      pop ds
print
macro str
      mov ah,9
      lea dx,str
      int 21h
     
endm
      print mes1
      call inint
      call outint
konets:
mov ax,4c00h
      int 21h
outint
proc near
      push cx
      push dx
      push ax
      push bx
      xor cx,cx
      mov bx,10
del:              ;<<<<--- Обнуляем DX
перед делением AX на BX
      xor dx,dx   ;<<<<---
Иначе будет делиться DX:AX на BX
      div
bx
      inc cx
      push dx
      cmp ax,0
      jne del
      mov ah,2
vvv:  pop dx
      add dl,30h
      int 21h
      loop vvv
      pop bx
      pop ax
      pop dx
      pop cx
       ret
outint
endp
inint proc near
      push bx
      push dx
      xor dx,dx
      xor ax,ax
fgh:  push ax
      mov ah,1
      int 21h
      cmp al,13
      je jkl
      sub al,30h
      mov dL,aL
      mov bx,10
      pop ax
      push dx
      mul bx
      cmp dx,0
      jne error
      pop dx
      add ax,dx
      jmp fgh
jkl:  print nline
      pop ax
      pop dx
      pop bx
      ret
error:
print errs
      mov ax,4c01h
      int 21h
inint
endp
mes1 db
'Введите число: $'
nline
db 13,10,'$'
errs db
'error?$'
end
begin
==========================================
Программа
OUTSTR.ASM Должна выводить
строку, ограниченную нулём. На практике
зацикливается. Конец строки не определяется.
======================================= assume cs:cod,ds:cod
cod segment org 100h
start: cld mov ah,0eh mov si,offset string
m1: lodsb
je m2 int 10h jmp m1
m2: mov ah,4ch int 21h
string db 'It`s ASCIIZ-string',0
cod ends
m3: end start
======================================== Исправленный
вариант. Команда lodsb не
изменяет флаги, поэтому необходимо ввести проверку
на нулевой символ. Изменения
выделены знаком <<<<
======================================== assume cs:cod,ds:cod
cod segment org 100h
start: cld mov ah,0eh mov si,offset string
m1: lodsb cmp al,0 ; <<<<-- Проверка
на конец строки
jz m2 int 10h jmp m1
m2: mov ah,4ch int 21h
string db 'It`s ASCIIZ-string',0
cod ends
m3: end start
=========================================
Исходная
программа PASSWORD.ASM Спрашивает
пароль, кодирует его командой XOR и затем сравнивает с
зашифрованным паролем в самой программе. Если не
совпадают, то выдаёт строку:"Неверный пароль", если совпадают,
то "Its ASCIIZ-string".
======================================= model
tiny codeseg org
100h
start: jmp
passw
m3: cld mov
si,offset string
m1: lodsb or
al,al jz
m2 int
10h jmp
m1
m2: mov
ah,4Ch int
21h
string
db 13,10,'Its ASCIIZ-string',0 even
passw: lea
dx,p1 mov
ah,9h
m5: int
21h mov
ah,0ah lea
dx,Sizest int
21h mov
cx,6 lea
si,p2
cicl: xor byte
ptr[si],-1 inc
si loop
cicl mov
cx,7 lea
si,realsize lea
di,p3 repe cmpsb jne
m4 mov
ah,0eh jmp
m3
m4: lea
dx,mes mov
ah,9 int
21h mov
ax,4c01h jmp
m5
p1 db 'Введите пароль: $'
sizest db 20
realsize db 0
p2 db '********************'
p3 db 6,'ОИЪНЛЖ'
mes db 13,10,'Неверный пароль$' end
start
======================================= Изменённые
варианты программы. Все изменения
выделены знаком <<<<
Вариант
1:
======================================= model
tiny codeseg org
100h
start: jmp
passw
m3: cld mov
si,offset string
m1: lodsb or
al,al jz
m2 int
10h jmp
m1
m2: mov
ah,4Ch int
21h
string
db 13,10,'Its ASCIIZ-string',0 even
passw: lea
dx,p1 mov
ah,9h
m5: int
21h mov
ah,0ah lea
dx,Sizest int
21h mov
cx,6 lea
si,p2
cicl: xor byte ptr[si],-1 inc
si loop
cicl mov
cx,7 lea
si,realsize lea
di,p3 repe cmpsb
; jne
m4 ;<<<<
Под отладчиком команда jne была nop ;<<<<
заменена на две команды nop nop ;<<<<
Таким образом при любом пароле mov
ah,0eh ; строка выводится jmp
m3
m4: lea
dx,mes mov
ah,9 int
21h mov
ax,4c01h jmp
m5
p1 db 'Введите пароль: $'
sizest db 20
realsize db 0
p2 db '********************'
p3 db 6,'ОИЪНЛЖ'
mes db 13,10,'Неверный пароль$' end
start
=======================================
Вариант
2:
======================================= model
tiny codeseg org
100h
start: jmp
passw
m3: cld mov
si,offset string
m1: lodsb or
al,al jz
m2 int
10h jmp
m1
m2: mov
ah,4Ch int
21h
string
db 13,10,'Its ASCIIZ-string',0 even
passw: lea
dx,p1 mov
ah,9h
m5: int
21h mov
ah,0ah lea
dx,Sizest int
21h mov
cx,6 lea
si,p2
cicl: xor byte
ptr[si],-1 inc
si loop
cicl mov
cx,7 lea
si,p3 ;<<< Изменен
адрес начала введённой строки lea
di,p3 ; Пароль сравнивается сам с
собой repe cmpsb jne
m4 mov
ah,0eh jmp
m3
m4: lea
dx,mes mov
ah,9 int
21h mov
ax,4c01h jmp
m5
p1 db 'Введите пароль: $'
sizest db 20
realsize db 0
p2 db '********************'
p3 db 6,'ОИЪНЛЖ'
mes db 13,10,'Неверный пароль$' end
start
=======================================
Вариант
3:
======================================= model
tiny codeseg org
100h
start: jmp
passw
m3: cld mov
si,offset string
m1: lodsb or
al,al jz
m2 int
10h jmp
m1
m2: mov
ah,4Ch int
21h
string
db 13,10,'Its ASCIIZ-string',0 even
passw: lea
dx,p1 mov
ah,9h
m5: int
21h
; mov
ah,0ah <<<<
; lea
dx,Sizest <<<<
Отключён ввод пароля
; int
21h <<<<
(всё равно не нужен) mov
cx,6 lea
si,p3 ;<<<<
cicl: xor byte
ptr[si],-1 inc
si ;
Расшифровывается пароль из loop
cicl ; программы и
сравнивается сам с собой mov
cx,6 lea
si,p3 ;<<<< lea
di,p3 repe cmpsb jne
m4 mov
ah,0eh jmp
m3
m4: lea
dx,mes mov
ah,9 int
21h mov
ax,4c01h jmp
m5
p1 db 'Пароля не будет!$' ;<<<<
sizest db 20
realsize db 0
p2 db '********************'
p3 db 6,'ОИЪНЛЖ'
mes db 13,10,'Неверный пароль$' end
start
=======================================
Вариант
4:
======================================= model
tiny codeseg org
100h
start: jmp
passw
m3: cld mov
si,offset string
m1: lodsb or
al,al jz
m2 int
10h jmp
m1
m2: mov
ah,4Ch int
21h
string
db 13,10,'Its ASCIIZ-string',0 even
passw: mov
ah,0eh ;<<<< Пароль не
спрашивается jmp
m3 ;<<<<
Сразу выводится строка
m5: int
21h mov
ah,0ah lea
dx,Sizest int
21h mov
cx,6 lea
si,p2
cicl: xor byte
ptr[si],-1 inc
si loop
cicl mov
cx,7 lea
si,realsize lea
di,p3 repe cmpsb jne
m4 mov
ah,0eh jmp
m3
m4: lea
dx,mes mov
ah,9 int
21h mov
ax,4c01h jmp
m5
p1 db 'Введите пароль: $'
sizest db 20
realsize db 0
p2 db '********************'
p3 db 6,'ОИЪНЛЖ'
mes db 13,10,'Неверный пароль$' end
start
=======================================

© 2011 Рефераты