IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Как вводить строку?
trminator
сообщение 3.05.2003 18:14
Сообщение #1


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Объясните, пожалуйста, как правильно вводить строку, пользуясь функцией 0Ah DOS.
Есть две программы, вроде обе должны работать, но работает только первая, хотя по идее они должны одинаково работать...

Вот программы:
Первая

============================
DOSSEG
.MODEL small
.STACK 200h
.DATA
max db 0FFh ;max длина
len2 db 0 ;Реальная длина
str1 db 255 dup (' ') ;Собственно строка
endl db 13,10,'$' ;Переход на новую строку
.CODE
start:
mov ax, @data
mov ds, ax

mov dx, OFFSET max ;Если верить NortonGuides,
; в DX нужно писАть смещение строки, причем 1-й байт должен означать
; макс. длину строки, во 2-й байт ДОС выдаст длину введенной строки,
; а дальше будет сама строка
mov ah, 0Ah
int 21h

mov bl, len2
xor bh, bh
mov str1[bx],'$'; чтобы потом напечатать - признак конца

mov dx, OFFSET endl;На новую строку
mov ah, 09h
int 21h

mov dx, OFFSET str1;Печатать введенную строку
mov ah, 09h
int 21h

mov ah, 4Ch
int 21h
END start


===============================
Вторая:

dosseg
.model small
.stack 100h
.data
MyStr db 0FFh,0, 0FFh dup (' '),'$'; а тут я хочу то же самое,
; но работая с 1 переменной, а не с тремя. Потом хотел сдвинуть,
; но заметил, что у меня вообще ничего не вводит
.code
start:
mov ax,@data
mov ds, ax

mov dx, offset MyStr
mov ah, 0Ah
int 21h

mov ah, 4ch
int 21h
end start

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
GLuk
сообщение 4.05.2003 3:59
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


2trminator: Я трейсил вторую прогу, все нормально...типа буфер наполняется данными.

2Shadow: Я тут маленько над кодом поизвращался... типа мой вариант:


.8086
.MODEL TINY
.CODE
ORG 100h
START:
mov ax,3
int 10h
; Буферизированный ввод с устройства STDIN
lea dx,MaxSize
mov ah,0ah
int 21h
; Помещаем признак конца строки
inc dx
mov si,dx
mov ah,0
lodsb
add si,ax
mov byte ptr [si],'$'
inc dx
push dx; Сохраняем смещение, чтоб потом не инициализировать
; Позиционируем курсор в координаты 10:10
mov ah,02
mov bh,0
mov dx,0A0Ah
int 10h
; Выводим сформированную строку
pop dx
mov ah,09h
int 21h
; Ждем нажатия клавиши и завершаем программу
mov ah,0
int 16h
mov ax,4C00h
int 21h

MaxSize db 0F0h
Buff db 253(?)
END START

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 14.07.2025 4:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"