Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с выводом на экран, С переводом строки 
:(
    Опции темы
Igor_K
Дата 7.5.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте. Впервые пользуюсь ассемблером. 
:есть такой код:
Код

DOSSEG
        .MODEL   SMALL
        .STACK   100h
        .DATA
vvod  db 255, 255, 255 dup("$")
vv1   db "Vvedite stroku 1: $"
vv2   db "Vvedite stroku 2: $"
        .CODE
ProgramStart:
        mov ax, @data
        mov ds, ax

        mov ah, 09h            ; функция DOS печати строки
        mov dx, offset vv1
        int 21h
        mov dx, offset vvod
        mov ah, 0ah
        int 21h

        mov ah, 09h
        mov dx, offset vv2
        int 21h
        mov dx, offset vvod
        mov ah, 0ah
        int 21h



        mov ah,4ch          ; функция DOS завершения
                         ; программы
        int 21h
END     ProgramStart



Все как бы нормально. Сначало выводит
Цитата

Vvedite stroku 1: Вася

Но как ввел первую строку, нажимаю ентер а вторая строка "Vvedite stroku 2" выводится в том же ряде, и заменяет собой первую. Как после ввода первой строки сделать перенос строки? Чтобы было так:
Цитата

Vvedite stroku 1: Вася
Vvedite stroku 2: Пупкин


Вот код, где пичатается первая строка и нужно ввести строку
Код

mov ah, 09h            ; функция DOS печати строки
        mov dx, offset vv1
        int 21h
        mov dx, offset vvod
        mov ah, 0ah
        int 21h

Как можно после нее перевести строку на пару позиций вниз?

Еще вопросы:
Можно ли прямо в коде выводить символы или нужно их создавать как переменные vv1   db "Vvedite stroku 1: $"?
Знаю, что можно перенести строку при печати так: Message1  DB 'Hello1! ',13,10,'$'
А можно ли перевести строку в самом коде? Чтобы ввести Message1  DB 'Hello1! ','$' а перенос сделать в коде после вывода этой строки?

Это сообщение отредактировал(а) Igor_K - 7.5.2009, 16:15
PM MAIL   Вверх
ФедосеевПавел
Дата 7.5.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Igor_K @  7.5.2009,  16:12 Найти цитируемый пост)
Чтобы ввести Message1  DB 'Hello1! ','$' а перенос сделать в коде после вывода этой строки?

Да.
Код

..........................
        .DATA
......................
CR_LF   db 13,10,"$"        ; символы перевода строки
.............................
        .CODE
ProgramStart:
        mov ax, @data
        mov ds, ax

        mov ah, 09h            ; функция DOS печати строки
        mov dx, offset vv1
        int 21h
        mov dx, offset vvod
        mov ah, 0ah
        int 21h

        mov ah, 09h            ;Перевод на одну строку вниз
        mov dx, offset CR_LF
        int 21h
.....................................

PM   Вверх
Igor_K
Дата 8.5.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ФедосеевПавел, Спасибо за помощь! smile с переводом строки разобрался.

Но появились еще проблемы.
Вот код моей полученной программы:
Код

DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
imia     db 255, 255, 255 dup("$")
familiya db 255, 255, 255 dup("$")
prabel   db ' ', '$'
privet   db 'Privet ', '$'
vvod1    db 'Imia: ', '$'
vvod2    db 'Familiya: ', '$'
CR_LF   db 13,10,"$"

.CODE
st_pr:
    mov ax,@Data
    mov ds,ax

    ; Ввод имени
    mov ah, 09h
    mov dx, offset vvod1
    int 21h
    mov dx, offset imia
    mov ah, 0ah
    int 21h

    ; Перевод строки
    mov ah, 09h
    mov dx, offset CR_LF
    int 21h

    ; Ввод фамилии
    mov ah, 09h
    mov dx, offset vvod2
    int 21h
    mov dx, offset familiya
    mov ah, 0ah
    int 21h

    ; Перевод строки
    mov ah, 09h
    mov dx, offset CR_LF
    int 21h

    ; вывод Привет имя фамилия
    mov ah, 09h
    mov dx, offset privet
    int 21h
    mov dx, offset imia
    int 21h
    mov dx, offset familiya
    int 21h


    mov ah, 4ch
    int 21h
END st_pr


Программа простая, запрашивает имя и фамилию, и печатает их на экран в виде: Privet Vasiliy Pupkin
Вводятся все нормально, проблема с последней строкой Privet Vasiliy Pupkin
Я ввожу данные и получаю:
Цитата

C:\BP\BIN>zx
Imia: Vasiliy
Familiya: Pupkin
 ♠PupkinVasiliy

Почему так? Тут у меня 3 вопроса:
1. Где делась фраза "Privet "? Ведь она есть в коде и поидее выводится самая первая
2. Почему перед фамилией появился какой-то левый значок "♠"? Бывает он появляется и перед именем, нужно только другое ввести имя.
3. Почему тут сначала выводится фамилия, а после имя? Ведь в коде сначала идет вывод имени, а фамилия уже потом.

Помогите разобраться пожалуйста!
Turbo Assembler  Version 3.2i
PM MAIL   Вверх
ФедосеевПавел
Дата 9.5.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все эти проблемы от того, что для ввода функцией 0Ah используется не строка, а структура. Т.е. при выводе результатов ввода для каждой введенной строки (и для имени, и для фамилии) сделать следующее:
1. В конце строки поставить символ '$'
2. Выводить на экра следующим образом
Код
    mov dx, offset imia+2
    int 21h
    mov dx, offset familiya+2
    int 21h

Тема ввода функцией 0ah и вывода функцией 09h уже поднималась. Можешь посмотреть в справочнике(учебнике) или http://forum.vingrad.ru/forum/topic-246757/view-all.html
Здесь кстати рассмотрен пример установки символа '$' в конце строки.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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