Вопрос № 56286: Добрый вечер господа эксперты!!!
Допустим я написал программу на языке Pascal и начинаю ее компелировать, чтобы создать ехе. файл. Если программа написана с ошибками, тут же во время компиляции выдается (пример): 10 Unexpected end of file
или...Вопрос № 56317: Здравствуйте.
В дос-программах для задержки назаданное к-во миллисекунд я использовал INT15h при AH=86h. В Windows 2000,XP данный метод не работает (задержки нет). Кто-нибудь знает метод для задержки, который бы работал и в DOS, и в Win9x, WinNT....Вопрос № 56373: Здравствуйте. Вот создал макрос и записал туда процедуру вывода содержимого регистра ax на экран. Но обьясните пожалуйста почему не работаем следующая программа, которая должна выводить :, а потом число 1010h ?
prg segment para public 'code'...
Вопрос № 56.286
Добрый вечер господа эксперты!!!
Допустим я написал программу на языке Pascal и начинаю ее компелировать, чтобы создать ехе. файл. Если программа написана с ошибками, тут же во время компиляции выдается (пример): 10 Unexpected end of file
или 25 Invalid string length
Я открываю приложение в учебнике Паскаля и читаю:
10 Не найден конец файла
25 Неверная длина строки
Теперь точно также я написал программу на Ассемблере, но она не компилирется, т.к. присутсвуют ошибки, я нажимаю клавиши Ctrl+0, чтобы их (ошибки) увидеть.
Вижу А2086 и далее написание на англиском.
Вопрос: В каком учебнике или справочнике по ассемблеру я смогу также, как и в Паскале, посмотреть что означает код А2086 (ЧТО ЭТО ЗА ОШИБКА) или другой код например А2066?
За раннее Вам благодарен!
Николай
Отвечает: ENS
Здравствуйте, Луковкин Николай Иванович!
В книге Юрова есть полный список ошибок. Без проблем можно откопать в инете.
Надеюсь я тебе помог
--------- Учение - свет!
Ответ отправил: ENS (статус: 2-ой класс)
Ответ отправлен: 22.09.2006, 16:12 Оценка за ответ: 5 Комментарий оценки: Как называется книга?
Вопрос № 56.317
Здравствуйте.
В дос-программах для задержки назаданное к-во миллисекунд я использовал INT15h при AH=86h. В Windows 2000,XP данный метод не работает (задержки нет). Кто-нибудь знает метод для задержки, который бы работал и в DOS, и в Win9x, WinNT.
Отправлен: 22.09.2006, 07:59
Вопрос задал: Sha_Lun (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: ADSota
Здравствуйте, Sha_Lun!
Дос от Виндовс сильно отличается. Использовать ситемные программы не получиться, не получиться использовать и таймер - в 2000,ХР нет доступа к нему...
Один из вариантов (для пентиума):
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 22.09.2006, 10:54
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Sha_Lun!
Решение, предложенное ADSota, конечно, будет работать, но у него есть
два недостатка:
1) привязано к частоте CPU
2) загрузка процессора становится равной 100%. Что особенно станет заметно при
достаточно больших задержках и частом их употреблении.
Хотя при редких и малых задержках - вполне приемлемое решение
При задержках >= 1 мс лучше использовать мультимедийный таймер
timeBeginPeriod(1) ; // где-то в начале инициируем таймер
...
timeSetEvent(1, // 1 мс
1,
(LPTIMECALLBACK)heMTimer, // событие, которое взведется по истечению времени
0,
TIME_ONESHOT | TIME_CALLBACK_EVENT_SET) ;
WaitForSingleObject (heMTimer, INFINITE) ; // ждем событие
Есть еще вариант - использовать Sleep(dwMsCount), но эту функцию можно использовать при значениях, больших 10 мс.
Да и работает с большой погрешностью. Не надо забывать, что Windows - это не
система реального времени...
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 22.09.2006, 12:53
Отвечает: Jekyll
Здравствуйте, Sha_Lun!
можно использовать Sleep:
void Sleep(
DWORD dwMilliseconds
);
или использовать объекты синхронизации: таймеры, мутексы, семафоры..
Ответ отправил: Jekyll (статус: 1-ый класс)
Ответ отправлен: 22.09.2006, 13:18
Вопрос № 56.373
Здравствуйте. Вот создал макрос и записал туда процедуру вывода содержимого регистра ax на экран. Но обьясните пожалуйста почему не работаем следующая программа, которая должна выводить :, а потом число 1010h ?
prg segment para public 'code'
assume cs:prg,ss:prg,es:prg,ds:prg
org 100h
start:
jmp go
go:
include c: asmincludevax.inc
lea dx,dww
mov ah,09h
int 21h
mov ax,0101h
call vaxp
exit:
ret
dww db ':$'
prg ends
end start
Приложение:
Отправлен: 22.09.2006, 18:40
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Whiteman!
Классный у тебя получился винигрет из понятий макроса, подпрограммы и инклюда :)
Давай сначала разберемся, что ты хочешь создать, макрос или подпрограмму?
Чем одно отличается от другого?
Макрос - это когда какой-то последовательности текстовых строк присваивается
имя. И это последовательность строк мы хотим вставить в нужное нам место
текста программы сколько угодно раз. Вызывается макрос указанием своего имени
(без команды call!). Компилятор каждый раз, как встретит имя известного ему макроса
вставит нужную последовательность строк.
А вот подпрограмма - нечто другое. Код подпрограммы лежит только в одном месте,
А вызов идет через call. И еще, у подпрограммы обязательно должен быть выход по команде ret.
Я не рассматриваю возможность и там, и там наличия параметров - это отдельный разговор.
По команде include мы можем добавлять любой текст в программу.
Обычно так вставляют часто используемые константы, подпрограммы, макросы и тому подобное.
Вернемся к твоей программе. У тебя больше от подпрограммы, поэтому сведем к подпрограмме.
Итак, ошибки:
1)Строка include c: asmincludevax.inc должна быть вставлена перед dww db ':$', т.к.
в ней у нас лежат подпрограммы (К слову, макросы вставляют в начале текста исполняемого кода, перед org 100h)
2)Имя подпрограммы - vax, а не vaxp
3)После последнего popa в vax.inc необходимо вставить ret (или так, как я сделал)
Полный текст смотри в приложении
Удачи!
Приложение:
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 22.09.2006, 19:22 Оценка за ответ: 5
Отвечает: Стас
Здравствуйте, Whiteman!
Согласен с Лысков Игорь Витальевич. Добавлю только1)Строка include c: asmincludevax.inc должна быть вставлена перед dww db ':$'
Зачем тебе:
jmp go
go:
может ты именно сюда хотел вставить include, тогда пиши так:
jmp go
include c: asmincludevax.inc
go:
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 24.09.2006, 02:35