Вопрос № 30612: Ассемблер знаю очень плохо, поэтому прошу помочь! В книге П.Абеля есть фрагмент программы, заменяющей один символ в строке на другой. В общем при запуске bat-файла компиляция и компоновка проходят успешно, ошибок в коде нет, но вылетает такое исключе...Вопрос № 30615: Здравствуйте уважаемые эксперты.
Установил себе TASM, создал в папке BIN файл с расширением .asm. Дальше застрял. Ввожу в командную строку tasm xxx.asm, ругается. Захожу в B32TOOLS, прописываю то же самое, опять безрезультатно.
Подскажит...Вопрос № 30627: ;Как и просили Иходник в студию! В чём же тут дело?????
;???????????
.286
.model tiny
CODSEG segment
assume cs:CODSEG
org 100h
_start:
jmp _Init
;########################################
Chars db '-|/'...Вопрос № 30631: Доброго времени суток! Мне необходимо сделать часы на асме, не в графическом режиме. Как это можно организовать с помощью портов? или может с помощью прерываний?
Буду очень благодарен если дадите ссылочку где про это почитать....
Вопрос № 30.612
Ассемблер знаю очень плохо, поэтому прошу помочь! В книге П.Абеля есть фрагмент программы, заменяющей один символ в строке на другой. В общем при запуске bat-файла компиляция и компоновка проходят успешно, ошибок в коде нет, но вылетает такое исключение:
"C:/win/System32/cmd.exe
Процессор NTVDM обнаружил недопустимую инструкцию". Подскажите, что это такое и как от него избавиться, пожалуйста!
Приложение:
Отправлен: 02.12.2005, 00:03
Вопрос задала: Ximera (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Евгений Иванов
Здравствуйте, Ximera!
по моему, не настроен DS.
и ES
mov ax, @data
mov ds, ax
mov es, ax
вначале
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 02.12.2005, 10:03
Вопрос № 30.615
Здравствуйте уважаемые эксперты.
Установил себе TASM, создал в папке BIN файл с расширением .asm. Дальше застрял. Ввожу в командную строку tasm xxx.asm, ругается. Захожу в B32TOOLS, прописываю то же самое, опять безрезультатно.
Подскажите пожалуйста в чем моя ошибка?
Заранее всем благодарен.
Отправлен: 02.12.2005, 04:08
Вопрос задал: Юра (статус: 2-ой класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sager
Здравствуйте, Юра!
Ты бы хоть иходник привел и как именно ругается tasm. Скорее всего у тебя ошибка в исходнике. И еще - в каком виде оформлен исходник(com или exe). Если exe - то параметры такие:
tasm file.asm
tlink /x file.obj
Ответ отправил: Sager (статус: Студент)
Отправлен: 02.12.2005, 09:34
Отвечает: Евгений Иванов
Здравствуйте, Юра!
а вот что он именно пишет - это и нужно знать!
приведи сюда текст
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 02.12.2005, 09:57
Вопрос № 30.627
;Как и просили Иходник в студию! В чём же тут дело?????
;???????????
.286
.model tiny
CODSEG segment
assume cs:CODSEG
org 100h
_start:
jmp _Init
;########################################
Chars db '-|/' ; выводимые символы
Nomer dw 0
Count db 1 ; счетчик числа прерываний. Устанавливаем в 1, чтобы сработало в самый первый раз
;#######################################
_Int08 proc
; вызвать старый обработчик 8-го прерывания
pushf
db 9ah ; код команды CALL FAR
Old_Int08 dd ?
pusha ; сохранить используемые регистры
push es
; установить ES на видеопамять
push 0b800h
pop es
xor di, di ; обнулить DI (теперь ES:DI указывает на левый верхний угол экрана)
dec cs:[Count] ; уменьшить счетчик вызовов
jnz @@Exit ; если не достигли 0 - ничего не делаем
@Time:
mov si,cs:[Nomer]
mov al,cs:Chars[si] ; прочитать выводимый символ
mov ah,0fh ; аттрибут: белые символы на черном фоне
stosb ; вывести на экран
inc si ; перейти к следующему символу
cmp si,4 ; дошли до конца списка символов?
jne @@SaveIndex ; нет - просто сохранить
xor si,si ; обнулить индекс очередного символа
@SaveIndex:
mov cs:[Nomer],si
mov cs:[Count],9
@Exit:
; восстанавливаем регистры и выходим
; сбрасывать контроллер прерываний не нужно, т.к. это делается в старом обработчике прерывания
pop es
popa
iret
_Int08 endp
_Init:
mov ax,0003
int 10h
mov ax,3508h ;Сохраняем
int 21h ;
;
mov word ptr cs:[Old_Int08],bx ;
mov word ptr cs:[Old_Int08+2],es
push cs ;Заменяем
pop ds ;
;
mov dx,offset _Int08 ;
mov ax,2508h ;
int 21h ;
CODSEG ends
end _start
;
;
;пробовал напрямую заменять и потом востанавливать вектор прерывания типа
;mov ax,word ptr es:[22h]
;...................
;тот же результат
;
;P.S.Обработчик написал один из экспертов RusFaq
Отвечает: Евгений Иванов
Здравствуйте, Яковлев Сергей Павлович!
mov dx,offset Old_Int08 ;Востанавливаем
mov ax,2508h ;
int 21h ;
.exit ;Выход
вот эта гадость неправильна.. :)
вот так кури
push ds
mov dx, word ptr cs:[Old_Int08]
mov ds, word ptr cs:[Old_Int08+2]
mov ax,2508h ;
int 21h ;
pop ds
удачи!
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 02.12.2005, 11:35 Оценка за ответ: 5
Вопрос № 30.631
Доброго времени суток! Мне необходимо сделать часы на асме, не в графическом режиме. Как это можно организовать с помощью портов? или может с помощью прерываний?
Буду очень благодарен если дадите ссылочку где про это почитать.
Отправлен: 02.12.2005, 12:07
Вопрос задал: Ohitmano (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sager
Здравствуйте, Ohitmano!
Например, так:
mov ah,2ch
int 21h
ch - часы
cl - минуты
dh - секунды
dl - сотые доли секунды
А чтобы вывести вот тебе процедура перевода чисел в ascii-код.
Приложение:
Ответ отправил: Sager (статус: Студент)
Отправлен: 02.12.2005, 12:55 Оценка за ответ: 5 Комментарий оценки: сэнкс, помогло