Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
_Garret_
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 20
1

Ввод и вывод с клавиатуры

25.11.2015, 16:18. Просмотров 594. Ответов 3
Метки нет (Все метки)

ЗДравствуйте, товарищи. Ситуация такова, что учусь писать на ассемблере. Задание такое, что нужно ввести строку с клавиатуры, и удалить выбранный символ (вводится после строки). Первый вариант программы работал, но преподаватель ввел "$$$" и программа помахала ручкой, вот второй вариант:
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
77
78
model small
.stack 100h
.data
str1 db 52
str2 db 50 
str3 db 10 dup(0Dh, 0Ah, "$")
.code
 
p1 proc                 
    mov ah, 09h
    mov dx, offset str3
    int 21h 
    ret
    p1      endp    
 
start:
mov ax,@data
mov ds,ax
mov es, ax
xor ax, ax
mov si, 2
mov     di, 0
xor     BL, BL
    
    mov str1[0], 50
    mov str1[1], 0
 
 ;первая строка
    mov ah,0Ah
    mov bx,0
    mov dx, offset str1
    int 21h
 
 ;переход на новую строку
    Call p1
 
 
 ;символ проверки
    mov ah, 01h
    int 21h
 
    Call p1
 
 ;проверка 
cycle:  cmp AL, str1[si]
    Je M1
    Jb M2
    Ja M2
 
M1: inc si
    cmp si, 50
    Jae M3
    Jb cycle
 
M2: mov BL, str1[si]
    mov str2[di], BL
    inc si
    inc di
    cmp si, 50
    Jae M3
    Jb cycle
    
 ;Вывод строки
    
M3: mov si, 0
    mov bl, str1[1]
 
M4: mov ah, 05h
    mov dl, str2[si]
    int 21h
    inc si
    cmp si, bx
    jb M4 
 
 
exit:   mov ax,4c00h
    int 21h
    end start
Tasm, tlink и прочее ошибок не выдают, но когда запускаю и ввожу символ для удаления, программа виснет и меня выкидывает из доса, прошу помочь и объяснить студенту

Благодарю заранее.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 16:18
Ответы с готовыми решениями:

Ввод массива с клавиатуры и вывод
Здравствуйте! Объявил массив mas db 4 dup(?) делаю ввод с клавиатуры: ...

Ввод с клавиатуры и вывод на экран
Изучаю совсем недавно ASM, изучение идёт ну очееень тяжело. Помогите...

Ввод чисел с клавиатуры и вывод их на экран
какие ошибки?(ввод и вывод чисел с клавиатуры) TITLE EXMOVE...

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

Ввод символов с клавиатуры и вывод на экран с условием
Помогите пожалуйста с кодом, по задаче нужно, чтобы при нажатии кнопок на...

3
Constantin Cat
2980 / 1114 / 376
Регистрация: 28.02.2015
Сообщений: 2,452
Завершенные тесты: 1
25.11.2015, 17:47 2
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
model small
.stack 100h
.data
szMax   equ 50
dbEnter db  10,13,'Enter string:$'
dbChar  db  10,13,'Enter simbol:$'
dbRes   db  10,13,'Result:$'
dbMax   db  szMax
dbLen   db  ?
dbStr   db  szMax dup(?)
.code
p1  proc
    mov ah,9
    int 21h
    ret
p1  endp
start:  mov ax,@data
    mov ds,ax
    mov es,ax
;выводим сообщение
    lea dx,dbEnter
    call    p1
;первая строка
    mov ah,0Ah
    lea dx,dbMax
    int 21h
;выводи сообщение
    lea dx,dbChar
    call    p1
;символ проверки
    mov ah,01h
    int 21h
;проверка
    xor si,si
    xor ch,ch
    mov cl,dbLen
    xor si,si
cycle:  cmp al,dbStr[si]
    jnz M2
    push    cx
    push    si
M1: mov bl,dbStr[si+1]
    mov dbStr[si],bl
    inc si
    loop    M1
    pop si
    pop cx
    dec si
M2: inc si
    loop    cycle
    mov byte ptr dbStr[si],'$'
;Вывод строки
    lea dx,dbRes
    call    p1
    lea dx,dbStr
    call    p1
    xor ax,ax
    int 16h
exit:   mov ax,4c00h
    int 21h
end start
Если препод будет шалить, можно ему запретить вводит символ "$" или использовать вывод через STDOUT.
0
_Garret_
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 20
26.11.2015, 05:23  [ТС] 3
Работает, то работает но вся плюшка в том, что человек должен иметь возможность вводить в программу все, что захочет у меня первая программа тоже работала прекрасно без $, но пришлось улучшать насколько я понял лучше бы сделать посимвольный вывод, и количество символов брать из буферной строки (вроде это содержится в 0 или 1 ячейке).
0
Constantin Cat
2980 / 1114 / 376
Регистрация: 28.02.2015
Сообщений: 2,452
Завершенные тесты: 1
26.11.2015, 09:34 4
Цитата Сообщение от _Garret_ Посмотреть сообщение
человек должен иметь возможность вводить в программу все, что захочет
Есть такое понятие "Безопасное программирование".

Человек может ввести в программу, только то, что ему позволит программа. Другими словами, если программа работает с цифрами, она должна как-то обрабатывать(игнорировать) неправильно(ошибочно) нажатые клавиши пользователем.
Среди всех пользователей, всегда найдется "одна макака с гранатой", которая с умным лицом и "полной уверенностью в своей правоте" отформатирует системный диск.


Цитата Сообщение от Constantin Cat Посмотреть сообщение
Если препод будет шалить
Ну и пусть себе балуется:
Assembler
1
2
3
4
5
mov ah,40h
mov bx,stdout;=1
mov cx,si;
lea dx,dbStr
int 21h
Этот код заменяет строки 53:54 и выведет на стандартное устройство вывода(по умолчанию - экран) нужное количество символов, проглотив при этом и как бы запрещенные символы "$$$$$$$".
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2015, 09:34

Ввод с клавиатуры и вывод на экран символа и строки
1. Напишите программу на языке ассемблера, которая: - вводит с клавиатуры...

A+b в ассемблере FASM - ввод с клавиатуры и вывод на экран
format PE console include 'win32ax.inc' start: mov EAX, 5d mov EBX, 6d...

Ввод переменных с клавиатуры и вывод результата операций на экран
Суть проблемы: Дана задача, решение которой которой написано ниже и так же...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru