Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 07.06.2015
Сообщений: 9
1

Ошибка в программе - вывести введенное имя пользователя

07.06.2015, 19:16. Показов 1613. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В программе ошибка. Я не могу ее найти.
Пользователь должен ввести свое имя. Потом нужно очистить экран и в левом верхнем углу вывести это имя.
Но оно не выводится!
Помогите найти ошибку.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
stacksg segment para stack 'stack'
    DW      32 dup ('*')
stacksg ends
 
datasg  segment para 'data'
    namepar     label   BYTE
    maxLen      DB      20
    nameLen     DB      0
    userName    DB      20 dup(' '), '$'
    
    prompt      DB      "Enter your name ", '$'
datasg  ends
 
codesg  segment para 'code'
    begin    proc    far
        assume  cs:codesg, ds:datasg, ss:stacksg, es:datasg
        push    ds
        sub     ax, ax
        push    ax
        mov     ax, datasg
        mov     ds, ax
        mov     es, ax
        
        call    ClearScreen     ; Очистить экран
        call    ShowPrompt      ; Выдать текст запроса
        call    InputName       ; Ввести имя
        call    ClearScreen     ; Очистить экран
        call    SetCursor       ; Установить курсор
        call    ShowName        ; Вывести имя
        ret
    begin    endp
    
    ; Выдать текст запроса
    ShowPrompt   proc    near
        mov     ah, 09
        lea     dx, prompt
        int     21h
        ret
    ShowPrompt   endp
    
    ; Ввести имя
    InputName    proc    near
        mov     ah, 0Ah
        lea     dx, namepar
        int     21h
        ret
    InputName    endp
    
    ; Вывести имя
    ShowName     proc    near
        mov     ah, 09
        lea     dx, userName
        int     21h
        ret
    ShowName     endp
    
    ; Очистка экрана
    ClearScreen proc    near
        mov     ax, 0600h
        mov     bh, 30
        mov     cx, 0000
        mov     dx, 184Fh   ; 24,79
        int     10h
        ret
    ClearScreen endp
    
    ; Установка курсора
    SetCursor   proc    near
        mov     ah, 02
        mov     bh, 00
        mov     dx, 0000
        int     10h
        ret
    SetCursor   endp
codesg  ends
    end begin
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2015, 19:16
Ответы с готовыми решениями:

Ошибка "Введенное имя пользователя совпадает с именем, под котором выполнен вход в систему"
Начало здесь: https://www.cyberforum.ru/windows-admin/thread1287974.html Посмотрел серверный...

Зная ip адрес компьютера и его имя вывести имя пользователя
Зная ip адрес компьютера и его имя вывести имя пользователя в текстовое поле. я смог осилить...

Запросить у пользователя имя, фамилию и возраст. После чего вывести: “Здравствуйте [Имя] [Фамилия]”.
Здравствуйте и снова я обращаюсь за помощью задали задание: Написать код на JavaScript который...

Вывести введенное имя на экран
хочу вводить с клавиатуры имя, а чтобы потом выводилось Здравствуйте и введенное имя! начала вот,...

2
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
08.06.2015, 07:11 2
Лучший ответ Сообщение было отмечено zer0ed как решение

Решение

У тебя буфер ввода изначально заполнен пробелами, а потом $
Предположим, что ты вводишь имя Ethereal
Тогда в буфере получится
'Ethereal' 0Dh <куча пробелов> $
Сначала выведется 'Ethereal'
потом 0Dh - возврат каретки, который вернет каретку (курсор) в начало строки
потом <куча пробелов> которые затрут поверх имя 'Ethereal'
и наконец встретившийся $ завершит вывод.

Итого, имя у тебя выводится, да только тут-же затирается пробелами.

Добавлено через 5 минут
Поставь в своей программе вместо mov dx,0000 в функции установки позиции курсора mov dx,40 и больше ничего не меняй. Т.е. поставь курсор не в левый верхний угол, а в середину верхней строки. И ты увидишь введенное имя. Т.е. оно действительно выводится ... только тут-же затирается
2
2 / 2 / 0
Регистрация: 07.06.2015
Сообщений: 9
08.06.2015, 14:13  [ТС] 3
Вот что значит невнимательность
Действительно, после ввода возврат каретки остается в строке. Я совсем забыл про это.
Спасибо

Переписал функцию ввода имени
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
    ; Ввести имя
    InputName   proc    near
        mov     ah, 0Ah
        lea     dx, namepar
        int     21h
        
        ; Заменить оставшийся Return на '$'
        mov     bh, 00
        mov     bl, nameLen
        mov     userName[bx], '$'
        ret
    InputName   endp
Теперь работает как надо.
1
08.06.2015, 14:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2015, 14:13
Помогаю со студенческими работами здесь

Как вывести имя, введенное пользователем, из input?
Ребят привет! Как вывести имя введенное пользователем из инпута??

Запросить у пользователя имя, фамилию, а затем вывести строку вида "фамилия, имя"
С. Прата, &quot;Язык программирования С++&quot;, 4 глава, задача 3. Напишите программу, которая запрашивает...

Вывести IP-адрес компьютера, имя компьютера, имя пользователя и дату и время включения/выключения компьютера
необходимо написать скрипт который, будет лежать в автозагрузке на локальных машинах и выводить в...

Вывести имя вошедшего пользователя в таблицу
Здравствуйте ув. форумчане! Пытаюсь сделать парольный доступ на базу, почти получилось.. Но есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru