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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Asm] Слова налаживаются друг на друга при выводе, или бред выводится с крокозябрами 
V
    Опции темы
Igor_K
  Дата 25.5.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте! 
Уже давно не могу разобраться с программой. В ней нужно ввести имя и фамилию. Потом напечатать их на экране.

Написал так:
Код

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



Так выводит на экран:
user posted image

Цитата

C:\BP\BIN>zx
Imia: Vasia
Familiya: Pupkin
 ♠Pupkin♣Vasia
C:\BP\BIN>zx
Imia: Vasilisa
Familiya: Pupkina
 Pupkinaasilisa


Ввожу Василиса Пупкина.  одну букву "схавало" Pupkinaasilisa  
Если ввести длинее слово, то схавает больше символов

Мне посоветовали прибавить двойки:
Код

    mov dx, offset imia+2
    int 21h
    mov dx, offset familiya+2
    int 21h


Символов ♣ и ♠ нету. Но буквы "хавает" всеравно. 

И еще почему-то не выводится слово Privet. Оно стоит в самом начале и его не видно вообще....
Код

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


Помогите пожалуйста переделать программу чтобы выводило правильно на экран! 
Чтобы было PrivetVasiaPupkin
PM MAIL   Вверх
586
Дата 25.5.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Слово "Privet" не печатается из за того, что в буфере ведённых слов присутствует символ переноса каретки CR. При печатании слов каретка переносится на начало, и стирает слово привет. 
14BD:0000        FF 05 56 61 73 69-61 0D 24 24 24 24 24 24     ..Vasia.$$$$$$
14BD:0010  24 24 24 24 24 24 24 24-24 24 24 24 24 24 24 24   $$$$$$$$$$$$$$$$
14BD:0020  24 24 24 24 24 24 24 24-24 24 24 24 24 24 24 24   $$$$$$$$$$$$$$$$

Первые два символа в буфере - это не строка. Если интересно, что это такое - читай описание:
Цитата(http://www.ctyme.com/intr/rb-2563.htm)
Offset  Size    Description     (Table 01344)
00h    BYTE    maximum characters buffer can hold
01h    BYTE    (call) number of chars from last input which may be recalled
(ret) number of characters actually read, excluding CR
02h  N BYTEs   actual characters read, including the final carriage return

Код
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  bx,offset imia
    mov  al,[bx+1]
    add  al,01
    xor  ah,ah
    mov  si,ax
    mov  byte [bx+si],'$'

    ; Перевод строки
    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  bx,offset familiya
    mov  al,[bx+1]
    add  al,01
    xor  ah,ah
    mov  si,ax
    mov  byte [bx+si],'$'

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

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

    mov ah, 09h
    mov dx, offset imia+2
    int 21h

mov ah, 02h
mov dl, ' '
int 21h            ; putch(' ')

    mov ah, 09h
    mov dx, offset familiya+2
    int 21h

    mov ah, 4ch
    int 21h

END st_pr


Это сообщение отредактировал(а) 586 - 25.5.2009, 20:48
PM   Вверх
Igor_K
Дата 1.6.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



586, СПАСИБО!!! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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