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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2010, 22:28   #1
fen1ksss
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 44
По умолчанию Строки

Есть задание: Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке лесенкой, т.е. выдать каждое слово в столбик, с заданным сдвигом относительно начала предыдущего.

Код:
data segment
    in_str db 80,?,82 dup (?)       
    out_str db  80 dup (?)
    enter db 0dh, 0ah, '$'          
data ends
code segment
assume cs: code, ds: data
	start:	mov ax, data           
		mov ds, ax          
		mov ah, 0ah
		int 21h
		;lea bx, in_str+2  
		xor cx, cx
		xor ax, ax
		mov cl, in_str+1
               
               
	beg:	mov dh, cl		; запомним cl через dh
		mov dl, in_str[si+2]
		inc al
		cmp dl, ' '		; сравнение al с пробелом
		jne _a			; если не равно то на m
		
		; переход на следущую строку
		xor bx, bx 
	    	lea bx, enter
		mov ah, 09h
	    	int 21h
		
		mov cl, al		; присвоить счетчик dl в cl
	beg1:	mov out_str[di], ' '
		inc di
		loop beg1
        	sub di, 1
                                               
	_a:	mov out_str[di], dl
		inc si
		inc di
		mov cl, dh		; то что  запомнили в dh обратно в cl
		loop beg
		
		xor dx, dx
		
		lea dx, enter
		mov ah, 09h
		int 21h
		
		lea dx, out_str
		mov ah, 09h
		int 21h
		mov ah, 0ah
		int 21h
         quit:	mov ax, 4c00h
		int 21h
code ends
end start
подскажите что не так сделал при переносе строки на следующую строку (как бы операция enter) вот здесь

Код:
xor bx, bx 
	    	lea bx, enter
		mov ah, 09h
	    	int 21h
Этот код не переводит на следующую строку, а оставляет на одной

вобще может есть более простой алгоритм entera?
fen1ksss вне форума Ответить с цитированием
Старый 30.11.2010, 22:56   #2
Ant1971on
Пользователь
 
Регистрация: 20.07.2010
Сообщений: 52
По умолчанию

Адрес enter должен быть в dx, а не в bx.
Ant1971on вне форума Ответить с цитированием
Старый 01.12.2010, 01:22   #3
fen1ksss
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 44
По умолчанию

теперь он просто перепрыгивает строку а не делает enter, т.е.

выводит введенную строку enter и выходную строку
as df

as df
fen1ksss вне форума Ответить с цитированием
Старый 01.12.2010, 21:14   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Это работалo:

Код:
EndStr	db 0ah, '$'

;.........
;.........
;.........
;.........
mov ah,09h
mov dx, offset EndStr
int 21h
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 01.12.2010, 21:44   #5
fen1ksss
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
Это работалo:

Код:
EndStr	db 0ah, '$'

;.........
;.........
;.........
;.........
mov ah,09h
mov dx, offset EndStr
int 21h
точно так же

as df

as df
fen1ksss вне форума Ответить с цитированием
Старый 01.12.2010, 23:28   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

А, ну да, признаю, был не прав, работать должно и так и так.
Вообще у вас код какой-то странный.

Зачем вот это в цикле обработки входной строки?

Код:
; переход на следущую строку
		xor bx, bx 
	    	lea bx, enter
		mov ah, 09h
	    	int 21h
добавлено.
вот чуть поправил:

Код:
s_s segment stack "stack"
db 256 dup(?)
s_s ends
data segment
    in_str db 80, 0, 82 dup ('$')
    out_str db  128 dup ('$')
    test_out db "test",'$'
    enter db 0dh, 0ah, '$'          
data ends
code segment
assume ss:s_s, cs:code, ds:data
start:	
	mov ax, data
	mov ds, ax

	lea dx, in_str
	mov ah, 0ah
	int 21h

	xor cx, cx
	mov ax, 1
	mov cl, byte ptr [in_str+1]
	lea si, in_str+2
	lea di, out_str
beg:
	push cx
	mov dl, byte ptr [si]
	cmp dl, ' '
	jne _a

	mov cl, al
	inc al
	mov word ptr [di], 0a0dh
	add di, 2
beg1:
	mov byte ptr [di], ' '
	inc di
	loop beg1
	sub di, 1
                                           
_a:
	mov byte ptr [di], dl
	inc si
	inc di
	pop cx
	loop beg

	lea dx, enter
	mov ah, 09h
	int 21h

	lea dx, out_str
	mov ah, 09h
	int 21h

	mov ah, 0ah
	int 21h
		
quit:
	mov ax, 4c00h
	int 21h

code ends
end start
Вложения
Тип файла: rar proga54.rar (766 байт, 12 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 01.12.2010 в 23:58.
Ulex вне форума Ответить с цитированием
Старый 02.12.2010, 11:26   #7
fen1ksss
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
А, ну да, признаю, был не прав, работать должно и так и так.
Вообще у вас код какой-то странный.

Зачем вот это в цикле обработки входной строки?

Код:
; переход на следущую строку
		xor bx, bx 
	    	lea bx, enter
		mov ah, 09h
	    	int 21h
не знал что именно так нужно использовать

Код:
mov word ptr out_str[di], 0a0dh
		add di, 2
теперь вопрос: почему к di добавляется именно 2?

понял, для перевода курсора в начало строки и на след строку

спасибо

Последний раз редактировалось fen1ksss; 02.12.2010 в 11:56.
fen1ksss вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Дбавление новой строки, после строки с подходящими параметрами RailOS Microsoft Office Excel 5 18.08.2010 10:12
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27