Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Вывод двух строк на экран 
:(
    Опции темы
plastic_doll
Дата 21.10.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот у меня тоже ошибочка в элементарном фрагменте, но я ее в упор не вижу, помогите плиз... smile  smile 
Программа большая, вот та ее часть, где запрашивается ввод 2 строк и их же вывод на экран... Вместо введенных строк на экран выводится "мусор"... smile  smile 
Компилируется все в ТАСМе (да, знаю, старый он и кривой, но... smile  )

Код

;режим 80х25

    mov    ah, 00
    mov    al, 03
    int    10h

;kursor_1
    mov    ah,02
    mov    bh,00
    mov    dh,3
    mov    dl,5
    int    10h

;output_string1 - вывод строки 1
    mov    ah,09
    lea    dx,string1
    int    21h

;kursor_2
    mov    ah,02
    mov    bh,00
    mov    dh,3
    mov    dl,45
    int    10h

;input_string3 - ввод строки 3 (ошибка?)
    mov    ah,0ah
    lea    dx,string3
    int    21h

;kursor_3
    mov    ah,02
    mov    bh,00
    mov    dh,7
    mov    dl,5
    int    10h

;output_string2 - вывод строки 2
    mov    ah,09
    lea    dx,string2
    int    21h

;kursor_4
    mov    ah,02
    mov    bh,00
    mov    dh,7
    mov    dl,45
    int    10h

;input_string4 - ввод строки 4 (ошибка?)
    mov    ah,0ah
    lea    dx,string4
    int    21h

;;;;;;;;;;;;;;;;;;;;;
;всякий др.код ;
;;;;;;;;;;;;;;;;;;;;;

;kursor_4
    mov    ah, 02
    mov    bh, 00
    mov    dh, 15
    mov    dl, 8
    int    10h

;output_string3  (вот тут начинается вывод "мусора")
    mov    ah,09
    lea    dx,string3
    int    21h


;kursor_5
    mov    ah, 02
    mov    bh, 00
    mov    dh, 15
    mov    dl, 40
    int    10h

;output_string4 (мусор....)
    mov    ah, 09
    lea    dx,string4
    int    21h

;отдел переменных

string1 db 'Введите строку 1','$'
string2 db 'Введите строку 2', '$'


s3 db lable byte
maxln db 30
realln db ?
s4 db lable byte
maxln db 30
realln db ?




PM MAIL   Вверх
anwe
Дата 22.10.2006, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Самое первое. Один вопрос - один топик. Есть вопрос - создавай топик и кидай вопрос туда.
Ну да ладно. За этим должен следить модератор.

Теперь по сути.
То, что ты написал - по меньшей мере глупо!!  smile Если у тебя строки 1 и 2 заданы как переменные, почему же их нельзя вывести просто-напрасто обращаясь к ним, а не мудрить: вносить их в буфер в строки 3 и 4, а после - из буфера?!  smile Используй ту же функцию DOS 09h, но ссылайся на строки 1 и 2, а не на их же копии в 3 и 4.
Второе. Функция DOS 0Аh заносит строку в буфер, введенную с клавиатуры. Это функция чтения данных с клавы. Если учитывать пункт 1, то есть, что это глупость - вносить переменную в буфер, а потом из буфера для вывода на экран, предположу, что после вывод строк 1 и 2 на экран надо что-то ввести с клавы. Ведь не зря же ты отводишь курсор. Повторюсь - это мое предположение. Из твоего вопроса это не видно.
Тогда есть два варианта вывода содержимого из буфера: как это сделал ты, через функцию 0Ah либо через функцию 02h, которая выводит не строку, а символы. Пусть будет по-твоему.
И тут опять проблема, даже две.
             Первая. Занесенную в буфер строку нельзя выводить в чистом виде. Реально записанная строка находиться, начиная с третьего байта. Поэтому надо добавить строку add dx,2 здесь:
Код

;output_string3  (вот тут начинается вывод "мусора")
    mov    ah,09
    lea    dx,string3
    add    dx,2           ;здесь
    int    21h
...
;output_string4 (мусор....)
    mov    ah, 09
    lea    dx,string4
    add     dx,2          ;и здесь
    int    21h
...

              Вторая. Конец строки, выводимой функцией 09h, определяется символом $. Поэтому в конец строк 3 и 4 необходимо добавить этот символ. Как это сделать? Проще проинициализировать их (строки) этим символом:
Код

string3 db 15 dup('$')   ;размер 15 выбран произвольно
string4 db 15 dup('$')

Вот так вот! Вроде все.
PM MAIL   Вверх
anwe
Дата 22.10.2006, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мда, твой ответ меня поставил в еще более затруднительное положение, вернее в неловкое: я писал, ориентируясь на, как бы сказать, мужской пол, а тут
Цитата
могла и намудрить...

Прошу прощения.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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