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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 13:47   #1
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию Вывод строки с опред. позиции

По учебе нужно сделать программку на TASM: вывод ФИО и группу с определенной позиции экрана. Для первой группы. Строка:19, столбец: 23. Для второй- строка: 4, столбец: 26...
На паскале еще писать простенькие асемблеровские программки как то получилось, но вот тут я даже разобратья не смогла как запустить)) Ну с этим мне учитель поможет.. Я даже немного разобралась как строку выводить, я так поняла с помощью mov dx, offset 'строка' и каким то прерыванием int 21h...но как задать позицию...? подсобите, пожалуйста, если несложно!
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 04.05.2009, 15:24   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Вот!Нашел в инете. Может поможет:
Код:
.model small
.stack 100h
.data
msg1 db 01,02,"бла-бла:",0
msg2 db 03,04,"бла-бла ",0
msg3 db 05,06,"бла-бла",0
msg4 db 70,22,"Конец!",0,0

.code

start:

main proc
mov ax,@data
mov ds,ax
mov si,offset msg1
endp main

mov ax,0003h
int 10h

m2:

mov ah,02h
mov dl,[si]
inc si
mov dh,[si]
int 10h

m1:

inc si
mov al,[si]

push si

inc si
cmp al,0
jnz m3
add cx,1
cmp [si+1],0
jz m4
jnz m2

m3:

pop si
mov dl,[si]
mov ah,2h
int 21h

jmp m1

m4:
mov ah, 0
int 16h
int 20h
end start
Ну что то типа этого.
смотри прерывания - int 10h и int 21h, там в 10h прерывании есть подфункция установки курсора в положение с парметрами (строка/столбец, задается в регистры), потом после установки курсора начинаешь выводить в этом месте текст
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 04.05.2009 в 15:28.
MalCer вне форума Ответить с цитированием
Старый 04.05.2009, 15:39   #3
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

Спасибо огромное! Если не сложно, можно еще коментарии к каждой строчке?! Особенно, что означают числа в секции дата, 01,02, 03,04,..70,22 ? и почему после "конец" стоит два нуля? Просто не хочеться бездумно списывать и подставлять свои значения, хочеться хоть немного разобраться. Значения команд в секции код мне понятны в принципе, но зачем они там, нет(((
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 04.05.2009, 17:48   #4
uNsLide
Новичок
Джуниор
 
Регистрация: 29.04.2009
Сообщений: 1
По умолчанию

Поправка (попробуйте так)

msg1 db 13,10,13,10,'Input something:$'
msg2 db 13,10,13,10,'бла-бла $'
msg3 db 13,10,13,10,'бла-бла $'
msg4 db 13,10,13,10,'Конец!$'

13 - 0dh - переход на новую строку
10 - 0ah - перевод каретки
Сам сегодня сдавал лабу по строкам...возможно перепутал значения 13 и 10...возможно
uNsLide вне форума Ответить с цитированием
Старый 04.05.2009, 23:42   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

uNsLide, не сбивайте людей! там первые две цифры - это координаты, куда выводить текст!!

Цитата:
Особенно, что означают числа в секции дата, 01,02, 03,04,..70,22 ? и почему после "конец" стоит два нуля?
алгорит построен так. в DX заносятся координаты (это первые два числа перед текстом.
(mov dl,[si]
inc si
mov dh,[si]
)
вызывается функция Ah=02 INT 10h (set cursor position)
потом выводятся буковка за буковкой пока не встретился нолик.
Если после него ещё один нолик (вот почему в конце два нолика) - то всё, конец программы, если нет - цикл. опять берём два числа, устанавливаем курсор и выводим текст...

p.s. только у меня висло c INT 20h
поэтом вместо INT 20H я в конце рекомендовал бы написать:
Код:
  mov ax, 4c00h 
  int 21h
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2009, 16:43   #6
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

Код:
.model small
.stack 100h
.data
msg1 db 01,02,"бла-бла:",0
msg2 db 03,04,"бла-бла ",0
msg3 db 05,06,"бла-бла",0
msg4 db 70,22,"Конец!",0,0

.code

start:

main proc
mov ax,@data
mov ds,ax
mov si,offset msg1
endp main

mov ax,0003h
int 10h

m2:

mov ah,02h
mov dl,[si]
inc si
mov dh,[si]
int 10h

m1:

inc si
mov al,[si]

push si

inc si
cmp al,0
jnz m3
add cx,1
cmp [si+1],0
jz m4
jnz m2

m3:

pop si
mov dl,[si]
mov ah,2h
int 21h

jmp m1

m4:
mov ah, 0
int 16h
int 20h
end start
Помогите,пожалуйста, не экзе сделать а ком?! И еще вопросик: Здесь, вроде, в SI передается только msg1 но выводит все строки,это почему?
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 12.05.2009, 17:08   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если мне память не отшибло DOS и BIOS прерывания расценивают конец строки как символ доллара, так что попробуй
Код:
msg1 db 01,02,"бла-бла:$",
Хотя вроде у тя проверка именно на ноль...
I'm learning to live...

Последний раз редактировалось Stilet; 12.05.2009 в 17:13.
Stilet вне форума Ответить с цитированием
Старый 12.05.2009, 23:30   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да... похоже, меня никто не читает!...

Цитата:
потом выводятся буковка за буковкой пока не встретился нолик.
Если после него ещё один нолик (вот почему в конце два нолика) - то всё, конец программы, если нет - цикл. опять берём два числа, устанавливаем курсор и выводим текст...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2009, 08:05   #9
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

Конечно, читаю)))) Иначе бы не просила помочь...)
Цитата:
Здесь, вроде, в SI передается только msg1 но выводит все строки,это почему?
Этот вопрос задаю,потому что не понимаю,зачем нужно объявлять переменные и присваивать им разные имена,если они работают по одному-msg1...или можно работать с ними как вместе так и по отдельности...*ломаю голову*
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 13.05.2009, 10:29   #10
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Код:
.model tiny
.code
org 100h
start:
	mov ax,0003h
	int 10h

	mov cx,4
	xor si,si
print_next:	
	mov di,strings[si]
	mov ax,0200h
	mov dx, [di]
	int 10h
	mov ax,0900h
	lea dx, di[2]
	int 21h
	add si,2
	loop print_next

	mov ah, 0
	int 16h
	int 20h
	
	msg1 db 01,02,"test1$"
	msg2 db 03,04,"test2$"
	msg3 db 05,06,"test3$"
	msg4 db 70,22,"End!$"
	
	strings dw msg1,msg2,msg3,msg4

end start
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы через опред. время выполнялось определен. действие? zotox Помощь студентам 1 24.03.2009 17:27
добавить к опред столбцу DbGrid данные furstenberg Компоненты Delphi 4 27.02.2008 20:15
вытащить часть слова до опред. символа WIC Microsoft Office Excel 5 27.12.2007 12:50
Вычисления номера позиции Stelix Паскаль, Turbo Pascal, PascalABC.NET 3 03.12.2007 03:05