Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: blaro
Дата сообщения: 27.06.2012 20:40
Привет всем. Я написал процедуру прерывания. Скажите, есть ли какая то возможность посмотреть через Turbo Debbuger как выполняется прерывание при вызове из программы?
Автор: Yvaliko
Дата сообщения: 27.06.2012 21:10
blaro
trace into
По умолчанию вроде F7
Автор: blaro
Дата сообщения: 27.06.2012 21:20
Yvaliko

Цитата:
trace into
По умолчанию вроде F7

Не, не помогает. Он ее проходит как обычную операцию
Автор: akaGM
Дата сообщения: 27.06.2012 22:27
blaro
а ты установи точку внутри своей процедуры...
Автор: akaGM
Дата сообщения: 28.06.2012 00:55
а вообще лучше отлаживать интеррапты сначала как обычные процедуры прежде чем делать их интерраптами :)
Автор: blaro
Дата сообщения: 28.06.2012 13:43
akaGM

Цитата:
а ты установи точку внутри своей процедуры...

Установил. Не помогает. Прога проходит дальше как будто это простая операция.

Цитата:
а вообще лучше отлаживать интеррапты сначала как обычные процедуры прежде чем делать их интерраптами

А по моему это не самое лучшее решение. Потому что в этом случае процедура может работать а интеррапт нет.
Я лучше выложу код который написал. Уже скажите мне что я неправильно сделал.
Краткое объяснение: процедура сначала печатает свою строку, а потом принимает через регист bx другую строку, копирует ее во внутреннюю строку самой процедуры, и печатает. Кста, печатает синие буквы на белом фоне.
[more=isr90h]
.model tiny
.code
org 100h
begin:
jmp init
imsg db "first Run$"
isr90 proc
    push ds
push cs
pop ds
push 0B800h
pop es
    lea si,imsg
prc:
mov al,[si]
cmp al,'$'
je ext
mov es:[di],al
mov byte ptr es:[di+1],01111001b
inc si
add di,2
jmp prc
ext:
    lea si,imsg
mov cx,9
cpy:
mov al,[bx]
mov [si],al
inc si
inc bx
loop cpy
    pop ds
iret
endp

init:
mov ah,25h
mov al,90h
mov dx,offset isr90
int 21h
mov dx,offset init
add    dx, 90H    
mov    cl, 4
shr dx, cl            
mov ah,31H
int 21H
end begin
[/more]
Автор: pkbasu
Дата сообщения: 28.06.2012 14:16
Эмм.. Я что-то не понял, а кто в обработчике прерываний будет предварительно каждый раз при новом вызове обработчика регистор DI устанавливать ? Или же его нужно только один раз проинициализировать, но и этого нет.
Куда указывает DI ?
Автор: akaGM
Дата сообщения: 28.06.2012 14:19
blaro

Цитата:
Потому что в этом случае процедура может работать а интеррапт нет

согласен...
но надо быть увереным, что что твоя инт-процедура работает...

я не знаю, что это за int90, какой-то юзерский что ли?
и как ты его "зовёшь"?
Автор: blaro
Дата сообщения: 28.06.2012 14:50
akaGM

Цитата:
я не знаю, что это за int90, какой-то юзерский что ли?

Да.

Цитата:
и как ты его "зовёшь"?

Так и зову int 90h
Автор: akaGM
Дата сообщения: 28.06.2012 15:30
blaro
ну так покажи...

кстати, пользовательским интам отведён диапазон 60-67, а 90 где-то для кого-то зарезервирован...
Автор: blaro
Дата сообщения: 28.06.2012 17:15

Код:
.model small
.stack 64
.data
msg db "Hello ugly world$"

.code
start:
mov ax,@data
mov ds,ax
lea bx,msg
int 90h
int 90h
mov ah,4ch
int 21h
end start
Автор: akaGM
Дата сообщения: 28.06.2012 17:22
blaro
прям так два раза? с первого не вызвалось :)

а в качестве isr что-нибудь примитивное (без регистров и вообще без ни фига), типа напечатать '*' в первом знакоместе b800 не пробовал?
Автор: blaro
Дата сообщения: 28.06.2012 17:25
пробовал. печатает на ура
Автор: akaGM
Дата сообщения: 28.06.2012 17:32
ну тогда разбирайся с регистрами, однозначно...
pusha/popa :) тебе в помощь...

наверняка при оформлении в виде отдельной процедуры
...
call isr90
call isr90
...
тоже сломается...
Автор: Prober
Дата сообщения: 28.06.2012 17:40
blaro
Перед вызовом прерывания строка не просто в BX, а в DS:BX. А в обработчике один BX остался. Плюс при обработке прерываний принято все регистры восстанавливать перед выходом (понятно, кроме тех, которые что-то должны возвращать).
Автор: SevereK20
Дата сообщения: 05.07.2012 21:43
Ребят, а при использовании различных моделей памяти программный код будет сильно отличаться? мы в институте всегда плоскую использовали, в большинстве книг small...
Автор: akaGM
Дата сообщения: 05.07.2012 22:29
SevereK20
tiny, small, medium, large, huge -- трудное наследие 16-битной жизни, в реальностии ты процентов на 99 с этим не столкнёшься...
flat -- 32-разрядная
Автор: SevereK20
Дата сообщения: 05.07.2012 22:31

Цитата:
tiny, small, medium, large, huge -- трудное наследие 16-битной жизни, в реальностии ты процентов на 99 с этим не столкнёшься...
flat -- 32-разрядная

спасибо. но код отличаться сильно будет?
в книгах в основном small...
Автор: akaGM
Дата сообщения: 05.07.2012 22:54
SevereK20
я не понимаю чего ты спрашиваешь? что такое отличия кода?

mov ax, 10

будет одинаково выглядеть и выполняться во всех моделях...
вообще, модель -- это способ адресации и организации данных/кода в памяти, связанных с сегментной организацией адресации 16-битного режима 8088/8086/80286
Автор: Yvaliko
Дата сообщения: 05.07.2012 23:08
SevereK20
Код отличатся не будет вообще.
Модель памяти указывается что бы компилятор знал какой формат ехешника ему собирать. Например в tiny нет сегмента данных.
Автор: SevereK20
Дата сообщения: 05.07.2012 23:26
все понял, спасибо.
значит то, что я видел в книгах - просто недоученное мною
Спасибо большое за разъяснения
Автор: bomzzz
Дата сообщения: 06.07.2012 05:59
я вчера когда прочитал так и не нашелся с ходу что сказать.

tiny и small это отношение к памяти не имеет, это команды компилятору какой исполняемый файл создавать. это COM файл, который еще можно было объявит так

CSEG segment
assume cs:CSEG
org 100h
Begin:

ret
CSEG ends
end Begin

что тоже самое

.model tiny
.code
org 100h
start:

end start

а может быть еще EXE. COM файл начинается с служебного заголовка 100h (256 байт) из PSP командной строки и занимает один сегмент 64 кбайта.

а к типу памяти скорее вот это команда компилятору имеетт

.model flat, stdcall
Автор: akaGM
Дата сообщения: 06.07.2012 10:53
.model tiny ;на всё про всё один сегмент
.model small ;один сегмент данных/стека и один кода
.model medium ;один сегмент данных и сколько угодно сегментов кода
.model compact ;один код и много данных
.model large ;много кода и много данный и всё 1МБ и каждый struct может занимать свой сегмент
.model huge ;как large и всё ограничено только набортной памятью
.model flat ;как tiny, но для 32-разрядной адресации
Автор: MERCURY127
Дата сообщения: 06.07.2012 12:42
Хуге ничем не отличается от ларже, кроме дурной сегментной арифметики для высокоуровневых компиляторов. Она так же ограничена 1 мб, только позволяет использовать элементы массивов размером более 64 кб. Для нормального использования всей набортной памяти в дос нужен защищенный режим.
Вывод - ищите другие книжки, где нет упоминаний про смалл медиум ларже. Пора уже выбираться из каменного века в 21ый
Автор: akaGM
Дата сообщения: 06.07.2012 12:49
в huge куча не ограничена 1 мегом, афаир...
Автор: MERCURY127
Дата сообщения: 06.07.2012 15:57
Не понял? А в ларже ограничена, что ли? Вопрос в другом - где лишний полуметр взять, без защищенного режима... Если хмс/емс - там более 64 кб зараз не передашь.
Автор: akaGM
Дата сообщения: 06.07.2012 15:59
да-да, <=1 MB, забыл...
Автор: Abs62
Дата сообщения: 06.07.2012 18:23
MERCURY127

Цитата:
Хуге ничем не отличается от ларже, кроме дурной сегментной арифметики для высокоуровневых компиляторов.

Если уж затрагивать языки высокого уровня, то дело не только в сегментной арифметике.
Автор: MERCURY127
Дата сообщения: 06.07.2012 18:44
с точки зрения ассемблера - huge/large абсолютно без разницы, кроме описанного...

Добавлено:
и опять таки, модели памяти в 2012 году - есть дремучий каменный век, изучение оных иначе как для написания биосов и бутсекторов - есть тормоз обучения, и в свете наступления эпохи х64 - это преступление, за которое препода надо судить...

Добавлено:
ладно бы там сстемное программирование, драйверы и пр - тут я конечно двумя руками за углубленное изучение. но ведь речь идет об обыкновенном курсе университетского идиотизма, после которого новоиспеченный "программизд" будет еще пару лет переучиваться на рабочем месте... зачем такие нужны? проще индуса нанять - он хоть сразу нужное направление знает
Автор: akaGM
Дата сообщения: 07.07.2012 11:13
всех мочить...

Добавлено:
раньше я кандидатские экзамены по программированию принимал...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.