Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ввод с клавиатуры - РАЗЪЯСНИТЕ!!! ПЛИЗ!!! 
:(
    Опции темы
darkness
Дата 10.12.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Хочу: чтобы я ввёл строку и она отобразилась

Что я делаю:
Код

.model tiny
 .code
 org 100h
sta:
   mov dx, offset mes
   mov ah, 9
   int 21h
   
   mov dx, offset buf
   mov ah, 0Ah
   int 21h
   mov viv, dx
   mov dx, offset cr
   mov ah, 9
   int 21h
   mov dx,  viv
   mov ah, 9
   int 21h
   ret
   print:
   mes db "vvedite:$"
   buf db 9
   viv dw ?
   cr    db 0Dh, 0Ah, "$"
   end sta

Здесь для ввода строки используется функция AH = 0Ah, для которой  DS:DX - адрес буфера
выход: буфер содрежит введённую строку...
Как я понимаю это происходит так:
по адресу DX хранится введдённая строка
и мы можем спокойно значение DX присвоить какой-нибудь перменной той же viv (у меня в коде), чтобы потом  сторку вывести...

В чём я не прав?


--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
anwe
Дата 10.12.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Почитай-ка поподробнее описание функций 0Ah и 09h. Относительно первой почитай что содержится в первых двух байтах буфера. Относительно второй почитай чем ограничивается выводимая строка.
PM MAIL   Вверх
darkness
Дата 11.12.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Про 0Ah:
в первый байт что записывается не нашёл, зато про второй- туда загоняется длина строки, а сама строка записывается начиная с третьего байта.....
Про 09h  подробного описания не нашёл....

Значит мне надо:

Код

 mov dx, offset buf
   mov ah, 0Ah
   int 21h
   mov viv, [dx+2]        ; так?
   mov dx, offset cr
   mov ah, 9
   int 21h
   mov dx,  viv
   mov ah, 9
   int 21h
   ret
   print:
   mes db "vvedite:$"
   buf db 9
   viv dw ?
   cr    db 0Dh, 0Ah, "$"
   end sta

--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
anwe
Дата 11.12.2006, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



09 выводит строку до первого встеченного "$".
Либо заполни свой буфер знаком.
PM MAIL   Вверх
darkness
Дата 11.12.2006, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



anwe, это я понял...
 а что касается ввода:
Правильно ли я понимаю, что в DX хранится  адрес начала буфера?
И следовательно чтобы выйти на введённую строку нужно мы делаем
Код

 mov viv, [dx+2]

а после того чтобы вывести эту строку делаем:
Код

 mov dx,  viv
   mov ah, 9
   int 21h


Так?
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
anwe
Дата 11.12.2006, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Да так. Только оптимизируй его. Ты перегоняешь из viv в dx туда-сюда.
PM MAIL   Вверх
darkness
Дата 11.12.2006, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



anwe,  ругается TASM на строку  mov viv, [dx+2]
говорит что illegal memmory reference. В чём ошибка?


Цитата

оптимизируй его


 smile  

Код

 .model tiny
 .code
 org 100h
sta:
   mov dx, offset mes
   mov ah, 9
   int 21h
   
   mov dx, offset buf
   mov ah, 0Ah
   int 21h
   mov viv, [dx+2]
   mov dx, offset cr
   mov ah, 9
   int 21h
   mov dx,  viv
   mov ah, 9
   int 21h
   ret
   print:
   mes db "vvedite:$"
   buf db 9
   viv dw ?
   cr    db 0Dh, 0Ah, "$"
   end sta

--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
anwe
Дата 11.12.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Эту ошибку он выдает потому, что из ячейки в памяти заносишь значение из ячейки в памяти. Команда mov этого не позваляет: должен быть один из операндов регистр.
Но после этого выдаст еще ошибку адрессации. До процессора 386 в качестве базы можно использовать только регистры bx, di, si и bp.
PM MAIL   Вверх
darkness
Дата 12.12.2006, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



anwe, и какая альтернатива?
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
anwe
Дата 12.12.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Как какая? Считывай переменную в регистр (любой), а после, если надо - в любую переменную.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.