Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler для начинающих

Войти
Регистрация
Восстановить пароль
 
Nastya_Juk
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 7
#1

Строки - Assembler

10.11.2013, 14:48. Просмотров 612. Ответов 12
Метки нет (Все метки)

C клавиаутры вводится строка и в ней нужно удалить 2 подряд идущие гласные буквы.
Буду благодарна за помощь, так как в строках вообще не могу разобраться

Добавлено через 19 минут
вот, что сама смогла сделать, но работает не корректно
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
.model small
.code
strBig db 255 
len db ?      
str:         
org 100h
start:
    mov ah,10   
    lea dx,strBig
    int 21h
 
    mov ah,2    ;переводим строку
    mov dl,10
    int 21h
 
    mov ah,1    
    int 21h
    mov bl,al    
 
    mov ah,2    
    mov dl,13
    int 21h
    mov dl,10
    int 21h
 
    xor cx,cx   
    mov cl,[len]    ;определяет число введенных символов
    lea si,str
Simchit:
    lodsb      
    mov ah,2    
    mov dl,al
    int 21h
    cmp bl,dl   ;проверяет на символ
    jz short ok ; 
    loop Simchit     
 
ok:
    dec cx 
    dex cx  ;уменьшаем число символов
 
Provsim:
    lodsb ;читаем символ из строки
    cmp bl,al   
    jz short ok1 ;   
    mov ah,2   
    mov dl,al
    int 21h
ok1:
    loop Provsim
 
exit:
 
    xor ax,ax  
    int 16h
 
    ret     
end start
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 14:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки (Assembler):

Сравнить строки, первый несовпадающий элемент строки-приемника записать в регистр AL, строки-источника - в DL - Assembler
Помогите написать программу на ассемблерене совсем еще разобрался с этим задание: Ввести с клавиатуры две строки одноразрядных...

Найти и вывести символы второй строки не совпавшие с символами первой строки - Assembler
Только начал изучать assemler. Задача: Реализовал:1.Написать программу, выполняющую следующую функцию. Заданы две строки. Проверить...

Заданы две строки. Проверить вхождение каждого символа строки 1 в строку 2 - Assembler
Нарооооод, помогите студентке. С программированием пока очень тяжко. Написать программу, выполняющую следующую функцию. Заданы две...

Даны две строки. Из второй строки выдать первый несовпадающий символ. - Assembler
Доброго времени суток! Прошу помочь в решении двух задач. Буду очень благодарен любой помощи. №1 Даны две строки. Из второй строки...

Сравнить 2 цифры первой строки с двумя цифрами второй строки - Assembler
Всем привет У меня есть программа на языке Ассемблер, в которой пользователь вводит две строки по 20 цифр, программа сравнивает 2 цифры...

Сжатие строки символов путем удаления пробелов из исходной строки - Assembler
Помогите пожалуйста, нужен только текст кода программы ассемблера, а то с Англ.языком вообще плохо, да и вообще ассемблер не понимаю. ...

12
Mikl___
Заблокирован
Автор FAQ
10.11.2013, 15:25 #2
Nastya_Juk,
а термин "гласные буквы" требует уточнение, если кириллица, то это "а, е, ё, и, о, у, ы, э, ю, я", если латиница, то это "a, e, i, o, u, y" или требуется удаление гласных букв, которые входят и в кириллицу и в латиницу?
1
Not at all!
108 / 190 / 18
Регистрация: 06.10.2013
Сообщений: 360
10.11.2013, 16:05 #3
Nastya_Juk, код только для латинских букв. Но добавить кириллицу не трудно. Нужно только дописать в массив гласных букв эти символы в кодировке Dos. В строке удаляются только первые две гласные, идущие подряд.

.model small
.data
strBig db 254
len db ?
str_ db 255 dup (?)
vowels db 'aeiouyAEIOUYа'

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
.code      
start:
mov ax,@data
mov ds,ax
mov es,ax
 
mov ah,10
mov dx,offset strBig
int 21h
 
xor cx,cx
mov cl,len
mov bx,2
mov si,offset strBig+2
 
@1:
lodsb
mov dx,cx
mov cx,sizeof vowel
mov di,offset vowel
 
repnz scasb
mov cx,dx
jnz @2
 
dec bx
je @3
jmp @4
 
@2:
mov bx,2
@4:
loop @1
 
jmp exit
@3:
 
mov di,si
sub di,2
rep movsb
mov al,24h
stosb
 
mov al,10
int 29h
 
mov dx,offset str_
mov ah,9
int 21h
 
exit:
 
xor ax,ax
int 16h
 
mov ax,4c00h
int 21h
end start
1
Nastya_Juk
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 7
10.11.2013, 16:40  [ТС] #4
Not at all!, а можно какие-то минимальные комментарии?

Добавлено через 12 минут
и в вот этой строчке
Assembler
1
mov cx,sizeof vowel
ошибку выдает

Добавлено через 46 секунд
Mikl___, может вы сможете помочь с той ошибкой, которую указала в предыдщем комментарии?
0
Not at all!
108 / 190 / 18
Регистрация: 06.10.2013
Сообщений: 360
10.11.2013, 16:48 #5
Как это я исхитрился так тэги влепить.
Nastya_Juk, в секции данных напишете так:

Assembler
1
2
vowels db 'aeiouyAEIOUYа'
len1 = $-vowels
И
Assembler
1
mov cx,sizeof vowels
Замените на
Assembler
1
 mov cx,len1
Добавлено через 2 минуты
Вы tasm'ом собираете?
1
Nastya_Juk
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 7
10.11.2013, 16:49  [ТС] #6
Not at all!, спасибо огромнейшее
А можно комментарии еще? а то какие-то команды есть незнакомые

Добавлено через 33 секунды
да, тасмом, все работает, только что проверила в DosBox)
0
Mikl___
Заблокирован
Автор FAQ
10.11.2013, 16:55 #7
Nastya_Juk,
не стоит выпрашивать комментарии, ты была не способна написать программу, ее написали за тебя, если комментарии опущены, то это сделано для того, чтобы по готовой программе ты начала разбираться самостоятельно, то же и с незнакомыми командами - открывай учебник и разбирайся с тем, что делает та или другая команда, либо подойди к своему преподавателю и попроси рассказать о той или иной команде (он будет только рад) и я думаю, что в vowels db 'aeiouyAEIOUYа' последняя "а" лишняя
1
Nastya_Juk
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 7
10.11.2013, 17:02  [ТС] #8
Вы правы безусловно, спасибо
0
Not at all!
108 / 190 / 18
Регистрация: 06.10.2013
Сообщений: 360
10.11.2013, 17:04 #9
Mikl___, написал уже. Такая адова мука эти комменты. Только потому, что ТС - девочка, написал. "а" конечно лишняя.
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
.model small
.data
strBig db 254
len db ?
str_ db 255 dup (?)
vowels db 'aeiouyAEIOUY'
len1 = $ - vowels
 
.code      
start:
mov ax,@data
mov ds,ax
mov es,ax
 
mov ah,10
mov dx,offset strBig
int 21h
 
xor cx,cx
mov cl,len
mov bx,2                           ; флаг наличия гласных букв во введённой строке
mov si,offset strBig+2
 
@1:
lodsb                                 ; очередной символ строки записываем в регистр al
mov dx,cx                          ; длину строки сохраняем в свободном регистре
mov cx,len1
mov di,offset vowel             ; адрес строки с гласными буквами 
repnz scasb                       ; сканируем эту строку пока не встретим в ней значение равное al
mov cx,dx                          ; восстанавливаем текущее значение длины введённой строки  
jnz @2                              ; если символ в al был найден в строке с гласными
 
dec bx                               ; уменьшаем на единицу значение флага
je @3                               ; если оно стало равно нулю - выходим из цикла, две гласные подряд найдены
jmp @4                              ; и продолжаем цикл
 
@2:
mov bx,2                          ; иначе восстанавливаем значение флага
@4:
loop @1                             ; продолжение цикла
 
jmp exit                             ; если просмотрена вся строка - двух гласных подряд не нашлось, выход
 
@3:
 
mov di,si                           ; здесь исключаем из строки две гласные
sub di,2                            ; текущий индекс уменьшаем на два
rep movsb                        ; и копируем оставшиеся символы строки, затирая две гласные
mov al,24h
stosb                                ; записываем символ завершения строки '$'
 
mov al,10                          ; переводим курсор на новую строку
int 29h
 
mov dx,offset str_              ; выводим на экран результат
mov ah,9
int 21h
 
exit:
 
xor ax,ax
int 16h
 
mov ax,4c00h
int 21h
end start
1
Mikl___
Заблокирован
Автор FAQ
10.11.2013, 17:19 #10
Not at all!,
Вы - "Белый рыцарь"! Только не стоит забывать одно из правил интернетов. В интернете девушек НЕТ!
0
Not at all!
108 / 190 / 18
Регистрация: 06.10.2013
Сообщений: 360
10.11.2013, 17:29 #11
Цитата Сообщение от Mikl___ Посмотреть сообщение
Только не стоит забывать одно из правил интернетов
Да ладно. Инкуба&суккуба видно по полёту. Здесь не то.
1
Nastya_Juk
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 7
10.11.2013, 18:31  [ТС] #12
Mikl___, Ну ничего себе заявочки!
0
Mikl___
10.11.2013, 18:35     Строки
  #13

Не по теме:

Nastya_Juk,
это не я придумал, это жизнь такая

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 18:35
Привет! Вот еще темы с ответами:

Исключить из строки самое короткое слово и сместить остаток строки - Assembler
Привет всем. Может кто знает решение. i8086 Из строки (ввод строки с клавиатуры, слова разделяются пробелами) исключить самое короткое...

После выдачи строки символов курсор перевести на начало следующей строки экрана - Assembler
Нужна помощь, не пойму как делать задание! Само задание: 1. Изучить прерывание типа 21 (вызов функций) и возможности его применения...

В текстовом файле поменять местами первую и последнюю строки. Найденные строки показать на экране - Assembler
Доброго времени суток! Не понимаю, как организовать алгоритм, уже весь день сижу. Заранее спасибо за помощь!

Составить программу для ввода строки символов с клавиатуры в буфер и вывод этой строки на экран - Assembler
Составить программу для ввода строки символов с клавиатуры в буфер и вывод этой строки на экран Как это хоть приблизительно сделать???


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

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

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