Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/37: Рейтинг темы: голосов - 37, средняя оценка - 4.78
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
1

Вывод строки на экран в заданной позиции

05.03.2010, 12:30. Показов 7405. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу вывести строку на экран в заданной позиции курсора. Сначала вывожу строку 9-ой функцией INT 21h, потом в этой же строке экрана, вслед за выведенной строкой нужно вывести еще одну строку (другого цвета). Для этого использую фунцию 13h INT 10h, почему-то не работает( вот код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mov ah,9
lea dx,flags
int 21h
;Ловлю курсор
mov ah,3
xor bx,bx
int 10h ; на выходе ;DH - строка, DL - столбец
 
lea bp,flagi
mov ah,13h
mov al,2
xor bh,bh
mov bl,7
mov cx,1
int 10     
 
mov ah,0   ; жду нажатия клавиши
int 16h
[INT 10h, ФУНКЦИЯ 13h] - записывает на экран символьную строку, начиная от указанной позиции.
ВХОДНЫЕ ПАРАМЕТРЫ:
AH = 13h;
AL - код формата(0-3):
AL=0, формат строки{симв., симв.,..., симв.} и курсор не перемещается,
AL=1, формат строки{симв., симв.,..., симв.} и курсор перемещается,
AL=2, формат строки{симв., атр.,...,симв., атр.} и курсор не перемещается,
AL=3, формат строки{симв., атр.,...,симв., атр.} и курсор перемещается;
BH - страница дисплея;
BL - атрибут (для режимов AL=0, AL=1);
CX - длина строки;
DX - позиция курсора для записи строки;
ES:BP - указатель строки.
ВЫХОДНЫЕ ПАРАМЕТРЫ: отсутствуют.
В итоге по INT 10h ничего не печатается, ожидание нажатия клавиши работает. В чем может быть дело???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2010, 12:30
Ответы с готовыми решениями:

Вывод текста на экран с заданной позиции.
БИЛЕТ №26 3. Недостатком оператора вывода cout<< является плохой способ форматирования текста....

Вывод результата на экран с 12 позиции четвертой строки экрана
Здравствуйте, совсем недавно начал изучать С++, несколько задач выполнил самостоятельно, да и с...

Функция выделяет из заданной строки подстроку заданной длины, начиная с заданной позиции
Помогите пожалуйста. Проблемы записью строки. На сколько я понял ,я записываю что то мимо или не...

Выделить из какой-либо строки часть заданной длины, начиная с заданной позиции
Кто знает: выделить из какой-либо строки часть заданной длины, начиная с заданной позиции.

13
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
05.03.2010, 13:37 2
А регистр es настроен на сегмент данных ?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
05.03.2010, 14:43  [ТС] 3
Цитата Сообщение от Goodwin98 Посмотреть сообщение
А регистр es настроен на сегмент данных ?
Да, это .COM программа.
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
05.03.2010, 14:54 4
В 15 строке пропустили h после 10.
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
06.03.2010, 09:26  [ТС] 5
Спасибо, работает!
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
06.03.2010, 09:42  [ТС] 6
Только я не пойму, почему она через раз работает правильно, вот :
Вывод строки на экран в заданной позиции

При первом запуске пропускается код:
Assembler
1
2
3
mov ah,9
lea dx,flags
int 21h
и символ по INT 10h выводится не там где надо, при втором запуске программы выводит как надо. В чем может быть дело?
0
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
06.03.2010, 13:42 7
без всей программы не ясно, скорее всего проблема со строкой которая выводится
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
06.03.2010, 13:59  [ТС] 8
Не думаю, со строкой все нормально:
Assembler
1
2
flags db 0dh,0ah,'Cf = ',0dh,0ah,'Zf = ',0dh,0ah,'Sf = ',0dh,0ah,'Of = ',0dh,0ah,
db 'Pf = ',0dh,0ah,'Af = ',0dh,0ah,'If = ',0dh,0ah,'Df = ','$'
Дело в том, что иногда она выводится, а иногда нет.

Добавлено через 3 минуты
без всей программы не ясно
Кусок кода, где происходит вывод строк приведен в 1ом посте.
0
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
06.03.2010, 21:08 9
дело не в строке, а в коде, весь код нужен что бы проверить почему не выводится иногда и что не так определить
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
07.03.2010, 09:17  [ТС] 10
Не думаю, что дело в коде, только что прогонял под отладчиком несколько раз (раз 10), все работает как надо. Запускаю просто программу, опять глюки

Вот, выкладываю код, кому не лень попробуйте скомпилировать. Программа не закончена, пока просто хочу разобраться с выводом. Потом уже все остальное.flags.txt (файл .тхт , в .асм почему-то не грузит)

Погонял программу, не правильно работает только при первом запуске, потом нормально.

Добавлено через 19 минут
Да, еще забыл, там в коде коментарии не совпадают с действительностью, просто просто код 100 раз переписывал.
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
07.03.2010, 14:34 11
Даже не знаю, почему так происходит. Но после
Assembler
1
2
3
    lea dx,mnem
    mov ah,0ah
    int 21h
Программа отказывается выводить что-либо через 21h прерывание с первого раза...
Это вообще-то неправильно по идее, но можно поставить перед
Assembler
1
2
3
    mov ah,9
    lea dx,flags
    int 21h
вызов любого 10h прерывания.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
07.03.2010, 18:52  [ТС] 12
Вообще странно, под отладчиком работает как надо. Там еще почему-то IF установлен, но я думаю это не должно влиять.

Добавлено через 2 часа 34 минуты
Это вообще-то неправильно по идее, но можно поставить перед ... вызов любого 10h прерывания.
Попробовал, в связи с этим столько идей появилось, буду все переписывать в который раз... Но будет лучше, чем сейчас есть
0
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
07.03.2010, 22:32 13
тоже не нашел причины (возможно консоль винды), заменил на код
Assembler
1
2
3
4
5
6
; Mnemocode AX,BX
mov ah,40h
xor bx,bx
mov cx, flagi-flags-1
lea dx,flags
int 21h
все работает

Добавлено через 23 минуты
что-то со страницами видеопамяти и использованием int 10h
вариант такой добавить в начало программы
Assembler
1
2
mov ax,3
int 10h
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
08.03.2010, 08:25  [ТС] 14
тоже не нашел причины (возможно консоль винды), заменил на код
Assembler
1
2
3
4
5
6
    ; Mnemocode AX,BX
mov ah,40h
xor bx,bx
mov cx, flagi-flags-1
lea dx,flags
int 21h

все работает
спасибо, учту.


что-то со страницами видеопамяти и использованием int 10h
вариант такой добавить в начало программы

Assembler
1
2
mov ax,3
int 10h
Да, я тоже об этом думал.
0
08.03.2010, 08:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2010, 08:25
Помогаю со студенческими работами здесь

Удалить из строки ее часть с заданной позиции и заданной длины
Ввести с клавиатуры строку. Удалить из этой строки ее часть с заданной позиции и заданной длины....

Удалить часть строки заданной длины с заданной позиции
Ввести с клавиатуры строку. Удалить из этой строки ее часть с заданной позиции и заданной длины....

Разработать функцию,которая перекрывает символы строки заданным количеством символов другой строки, начиная с заданной позиции
Разработать функцию,которая перекрывает символы строки заданным количеством символов другой строки,...

Поиск строки 1 в строке 2 с заданной позиции вперед и назад
Кто знает: поиск строки 1 в строке 2 с заданной позиции вперед и назад.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru