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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2012, 16:24   #1
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию ассемблер. Вывод

Подскажите где ошибка. Смысл программы:
1. вводим строку
2. Выводим ту же строку на екран + добавляем к ней заданую. в нашей ситуации это "www"

Код:
model small
.data
buf db 10,?,10 dup("$")
s db 'www$'
.stack 100h;
.code
begin:
mov ax,@data
mov ds,ax

;вводим
mov dx,offset buf
mov ah,0Ah
int 21h

;Выводим
mov dx,offset buf
mov dx,2
mov ah,09h
int 21h

;Добавляем в конец нашу приставку

mov dx,offset s
mov ah,09h
int 21h

mov ah,10h
int 16h

mov ax,4c00h;
int 21h;
end begin
ошибка в том, что при выводе заменяется первые 3 символа вводимого текста на "www"
CAN-UKRAINE вне форума Ответить с цитированием
Старый 16.05.2012, 16:47   #2
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

скорее недоработка, т.к. при использовании функции 0ah прерывания 21h в строку помещаются не только введенные символы но и код 0dh (возврат каретки - в начало строки) ...
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 16.05.2012, 16:50   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
buf db 10,?,10 dup("$")
s db 'www$'
сделайте так:
Код:
s db 13,10,"www."
buf db 20 dup("$")

а вывод осуществляйте так:
Код:
;Выводим
mov dx,offset s
mov dx,2
mov ah,09h
int 21h
тогда выводить дополнительно вам не потребуется.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 16.05.2012 в 16:52.
DiemonStar вне форума Ответить с цитированием
Старый 16.05.2012, 16:51   #4
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию

Подскажите пожалуйста, как исправить эту недоработку
CAN-UKRAINE вне форума Ответить с цитированием
Старый 16.05.2012, 17:05   #5
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
сделайте так:
Код:
s db 13,10,"www."
buf db 20 dup("$")

а вывод осуществляйте так:
Код:
;Выводим
mov dx,offset s
mov dx,2
mov ah,09h
int 21h
тогда выводить дополнительно вам не потребуется.
1. 13,10 - это ж ведь перевод курсора на новую строку в начало.
А мне нужно чтобы, например

Ввели: eee
Вывели: eeewww

2.
Цитата:
s db 13,10,"www."
После вывода s к ней еще добаляется куча лишних знаков
CAN-UKRAINE вне форума Ответить с цитированием
Старый 16.05.2012, 17:07   #6
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
сделайте так:
Код:
s db 13,10,"www."
buf db 20 dup("$")
1. Вы перепутали порядок
2. В таком случае функция 0ah не подходит
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 16.05.2012, 17:12   #7
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

для вывода введенной строки можно использовать:
- цикл с посимвольным выводом (функция 02 прерывания 21h)
- обработать строку, заменив в ее конце 0dh на '$' и затем воспользоваться функцией 9h прерывания 21h
- использовать функцию 40h прерывания 21h, указав в BX=1(запись на стандартное устройство вывода)
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 16.05.2012, 17:58   #8
Pathoswithin
Пользователь
 
Регистрация: 16.05.2012
Сообщений: 20
По умолчанию

А как вообще понимать
Код:
mov dx,offset buf
mov dx,2
Pathoswithin вне форума Ответить с цитированием
Старый 16.05.2012, 18:06   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Подумаешь, чуть не так понял ваше задание) подумал, что нужно в начало строки прибавлять, а не в конец.
Код:
buf db 20 dup(0)
s    db "www"
out db 24 db ("$")
и перед выводом:
Код:
push ds
pop es
lea si, buf
lea di, out
mov cx, 20
l1:
 cmp byte ptr ds:[si], 0dh
 je l2
 movsb  
 loop l1
l2:
 mov cx,3
 lea si, s
 rep movsb

;Выводим
mov dx,offset out
mov ah,09h
int 21h
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 16.05.2012, 18:14   #10
Pathoswithin
Пользователь
 
Регистрация: 16.05.2012
Сообщений: 20
По умолчанию

Я обычно не ленился и вводил посимвольно с помощью
Код:
mov ah,10h
int 16h
Буфер без лишних символов будет
Pathoswithin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод ассемблер Sined121 Помощь студентам 3 08.05.2010 14:29
ассемблер, вывод строк M@Z@X@K@ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 21.04.2010 19:57
Ассемблер вывод результата. SickUSP Помощь студентам 0 28.01.2010 18:13
Ассемблер - вывод факториала Voortex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 07.12.2008 12:29