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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2009, 18:16   #1
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию Ввод/вывод строк

Начал разбираться с вводом и выводом на асме. Хотел написать примерно следующее - пользователь вводит строку и программа выводит ее обратно. Вот, собственно, код:
Код:
Text    segment
           assume CS:text, DS:data
Begin:   mov AX,data
	mov DS,AX
 	mov BX,offset msg1
 	xor SI,SI
Input:   mov AH,01h
           int 21h
 	cmp AL,13
 	je Output
 	mov [BX][SI],AL
 	inc SI
 	jmp Input
Output: mov AH,40h
	mov BX,1
	mov CX,SI
	mov DX,offset msg1
	int 21h
	mov AX,4C00h
	int 21h
Text ends
data segment
msg1 db 80 dup (' ')
data ends
stk segment stack 'stack'
	dw 128 dup(0)
stk ends
end begin
Проблема в том, что у меня после нажатия клавиши ENTER курсор не переходит на новую строку,а только перемещается на начало строки, и, следовательно, выводимая строка затирает ту, которую ввел пользователь... В чем моя ошибка ?
anGeee вне форума Ответить с цитированием
Старый 04.09.2009, 20:08   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Что касается вашего кода, то тут было бы куда луше переделать, потому что слушком многого не понятно, например зачем mov AH,40h,
если я не ошибаюсь, то это ф-ия DOS для записи в файл, а не для вывода
Вот ваша программа, только под виндоус(прога консольная):
Код:
.386
.model flat,stdcall
  include \masm32\include\windows.inc
  include \masm32\include\user32.inc
  include \masm32\include\kernel32.inc
  includelib \masm32\lib\user32.lib
  includelib \masm32\lib\kernel32.lib
BSIZE equ 128
.data
buf db BSIZE dup(?)
stdout dd ?
stdin dd ?
cRead dd ?
cWritten dd ?
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov stdout,eax
invoke GetStdHandle,STD_INPUT_HANDLE
mov stdin,eax
NewLine:
invoke ReadConsole,stdin,addr buf,\
BSIZE, addr cRead, NULL

invoke WriteConsoleA,stdout,ADDR buf,cRead,\
addr cWritten,NULL
cmp cRead,2
jnz NewLine
invoke ExitProcess,0

end start
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 04.09.2009, 20:58   #3
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию

MalCer
Хм.. Ну как бы функция 40h с дескриптором 1 как раз таки и служит для вывода на экран.. Проблема вообще не в ней.. А что еще много непонятного в моей программе ? .. = (
За ваш код спасибо, но я там чуть ли не каждое второе слово не знаю = )
anGeee вне форума Ответить с цитированием
Старый 04.09.2009, 21:58   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Программе не хватает перевода строки после ввода. Автоматически этого не происходит.
Цитата:
Text segment
assume CS:text, DSata
Begin: mov AX,data
mov DS,AX
mov BX,offset msg1
xor SI,SI
Input: mov AH,01h
int 21h
cmp AL,13
je Output
mov [BX][SI],AL
inc SI
jmp Input
Output:
mov AH,40h
mov BX,1
mov CX,2
mov DX,offset crlf
int 21h

mov AH,40h
mov BX,1
mov CX,SI
mov DX,offset msg1
int 21h
mov AX,4C00h
int 21h
Text ends
data segment
msg1 db 79,80 dup (' ')
crlf db 0dh,0ah
data ends
stk segment stack 'stack'
dw 128 dup(0)
stk ends
end begin
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод-вывод в С++ StudentPolitech Помощь студентам 0 04.06.2009 20:07
Ввод и вывод числа Strogg Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.03.2009 17:44
Ввод и вывод Mihael-Vlz Паскаль, Turbo Pascal, PascalABC.NET 3 19.01.2009 18:00