Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 22:29   #1
bruk_bond
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию Вывод в резидентной части программы

a db '123456789'
d dw 0
c db 0
mov si,0
m1: mov ah,02
mov bh,00
mov dh,18
mov dl,c
int 10h
mov ah,0ah
mov al,a[si]
mov bh,0
mov cx,1
int 10h
inc si
inc c
cmp si,8
jbe m1



вот этот вывод находиться в резидентной части. и выводит совсем не числа(какие-то значки). в чём проблема?
если кинуть в отдельную прогоу, то всё прекрасно выводиться.
bruk_bond вне форума Ответить с цитированием
Старый 17.12.2009, 22:40   #2
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

так думаю что в конце строки не хватает знака "$", а вообще пиши полный код программы
Doholyan вне форума Ответить с цитированием
Старый 17.12.2009, 22:41   #3
bruk_bond
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию

.286
CSEG SEGMENT
ASSUME CS:CSEG, DS:CSEG, SS:CSEG
org 100h
start:
jmp init
oldint9 dd ?
dw 0ABCDh
int9:
push AX ;Сохранение регистров
push BX
push CX
push DX
push BP
push ES
push DS

xor AX,AX ;Выход при Ctrl+X
mov ES,AX
mov AL,ES:0417h
test AL,00000100b
jz no
in AL,60h
cmp AL,2Dh ;Сравнение со скан кодом X (2Dh)
je unload1
cmp AL,31 ;Сравнение со скан кодом S (1Fh)
je stat
no:
jmp noact
unload1:
jmp unload
stat:
a db '123456789'
d dw 0
c db 0
mov si,0
m1: mov ah,02
mov bh,00
mov dh,18
mov dl,c
int 10h
mov ah,0ah
mov al,a[si]
mov bh,0
mov cx,1
int 10h
inc si
inc c
cmp si,8
jbe m1

noact:
pop DS ;Восстановление регистров
pop ES
pop BP
pop DX
pop CX
pop BX
pop AX
jmp CSldint9 ; вернемся к старому обработчику

unload:
push DS

mov AX,2509h ;Восстановление исходного
;вектора 9 прерывания
lds DX,CSldint9
int 21h

pop DS

mov ES,CS:002Ch ;Выгрузка окружения
mov AH,49h
int 21h

push CS ;Выгрузка программы
pop ES
mov AH,49h
int 21h

jmp noact
endrz:
mes_l db 'Rezident loaded',0Dh,0Ah,'$'
mes_nol db 'Rezident is loaded',0Dh,0Ah,'$'
init:
mov AX,3509h ;Проверка на повторную загрузку,
int 21h ;сохранение старого
cmp ES:[BX-2],0ABCDh ;и установка нового вектора 9 прер.
je exit
mov word ptr oldint9+2,ES
mov word ptr oldint9,BX
mov AX,2509h
mov DX,offset int9
int 21h

mov AH,9
mov DX,offset mes_l
int 21h

mov DX,offset endrz ;Завершаем программу,
int 27h ;оставляя резидентную часть
exit:
mov AH,9
mov DX,offset mes_nol
int 21h

mov AX,4C00h
int 21h
CSEG ENDS
END start


вот полный код
bruk_bond вне форума Ответить с цитированием
Старый 17.12.2009, 23:07   #4
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

как сложно читать твой код!
одделяй данные от кода и процедур!
Ты сам в них не запутался.......??
Doholyan вне форума Ответить с цитированием
Старый 17.12.2009, 23:11   #5
bruk_bond
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию

да не запутался.
у меня не работает вывод в резидентной части.
точнее он работает, но выводит не то что надо.
bruk_bond вне форума Ответить с цитированием
Старый 17.12.2009, 23:42   #6
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

мой совет....разбей программу на несколько этапов, указание меток, пропиши "заглушки" в этом коде очень много так сказать ошибок....
когда разобьеш программу сам увидиш...не пиши код вместе с данными процесор принимает их за команды.
Doholyan вне форума Ответить с цитированием
Старый 17.12.2009, 23:48   #7
bruk_bond
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию

не резидентная часть работает.
она затирается про контрол х
и чего-то пишет при контрол s
защита от повторной загрузки работает

вот когда я в резидентне хочу вывести символ, что я должен в ds указать?
bruk_bond вне форума Ответить с цитированием
Старый 17.12.2009, 23:55   #8
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

вот послушай перво наперво ты должен сделать строки типа
mes_l db 'Rezident loaded',0Dh,0Ah,'$'
mes_nol db 'Rezident is loaded',0Dh,0Ah,'$'
вывести за приделы кода...
потом прописать выход из программы кода
INT20
и разбей программу на процедуры типа
имя PROC
....
....
имя endP
сам поймеш как это удобно
Doholyan вне форума Ответить с цитированием
Старый 18.12.2009, 00:01   #9
bruk_bond
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию

у меня эта часть работает.
и эти mes у меня выводятся, с ними всё ок.
мне нужен вывод в резидентной части.
хотелось бы понять почему выводиться не то, что прописано в строке.
bruk_bond вне форума Ответить с цитированием
Старый 18.12.2009, 00:12   #10
bruk_bond
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию

так я понял что у меня Ds пуст, что мне туда кинуть?
bruk_bond вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
линейные программы консольный ввод и вывод DjDeniels-61 Помощь студентам 1 20.11.2009 09:23
Создание резидентной программы (обработчик прерывания). Петруха Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 23.03.2009 16:31
вывод сообщения при закрытии программы tiger Помощь студентам 4 27.08.2008 23:31
Создание резидентной программы DenisVR Свободное общение 2 07.11.2007 19:42
Вывод части текста из файла CoDeR Общие вопросы Delphi 10 16.08.2007 14:30