С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Raibec
0 / 0 / 1
Регистрация: 08.12.2014
Сообщений: 14
1

Нужно из строки удалить буквы а и буквы b поменять B заглавные

06.12.2016, 23:43. Просмотров 792. Ответов 3
Метки нет (Все метки)

Может, кто помочь с заданием? Дана строка "abababababababababababab" нужно буквы а удалить, буквы b поменять на B заглавную. Код взят из учебника, сказали по нему работать. С буквой b всё работает. Но не могу удалить а со строки. Может, кто помочь? или подсказать!!!



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
DATASG SEGMENT PARA
    MYTEXT DB   'abababababababababababab' ,13,10, '$'
DATASG ENDS
 
STACKSG SEGMENT 'Stack'     
    DB 12 DUP(?)
STACKSG ENDS
 
CODESG SEGMENT PARA 'Code'
    
BEGIN PROC FAR
    ASSUME SS:STACKSG, CS:CODESG, DS:DATASG
    PUSH DS             ; сохраняем сегмент данных в стек
    SUB AX, AX          ; Обнуляем AX
    PUSH AX             ; сохраняем содержимое АХ в стек
    MOV AX, DATASG      ; заносим в сегментный
    MOV DS, AX          ; регистр DS адрес сегмента данных
    LEA BX, MYTEXT      ; заносим в BX адрес начального символа переменной Mytext
    MOV CX, 19H         ; Вносим в СХ значение 17Н - параметр цикла
    
    MOV AH, 09H             ;
    MOV DX, OFFSET MYTEXT   ;
    INT 21H                 ; вывода на экран
 
    MT1:    
        MOV AH, [BX]    ; Метка1: заносим в АН код первого символа переменной Mytext
        CMP AH, 62H     ; Сравниваем значения регистра AH и кода символа 41Н (символа A)
        JB MT2          ; преход к метке 2 если код, лежащий в AH больше 41H (символ старше A в таблице ASCII)
        CALL COR        ; вызов процедуры COR
        CMP AH, 62H     ; Сравниваем значения регистра AH и кода символа 5АН (символа Z)
        JA MT2          ; преход к метке 2 если код, лежащий в AH меньше 5АH (символ младше Z в таблице ASCII)
 
    MT2:
        INC BX          ; Метка 2: увеличиваем значение в BX на 1
        LOOP MT1        ; Цикл с параметром, лежащим в СХ, передающий управление коду под меткой 1.
        LEA DX, MYTEXT  ; Заносим в DX адрес переменной MYTEXT для вывода на экран
        MOV AH, 09H     ; оформляем функцию DOS
        INT 21H         ; вывода на экран
        RET             ; воврат
        
BEGIN ENDP
    
COR PROC NEAR           ; Начало процедуры COR
    NOP                 ; пауза
    SUB AH, 20H         ; прибавляем к коду символа смещение 20H по таблице ASCII
    MOV [BX], AH        ; занесение в ячейку с адресом, лежащим в BX, кода символа из AH
    RET                 ; воврат 
COR ENDP                ; завершение процедуры
 
CODESG ENDS
END BEGIN
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2016, 23:43
Ответы с готовыми решениями:

Строки: заменить заглавные буквы на строчные, сместить цифры в начало
Ребят, не могли бы сделать набросок программки: 1. Ввести строку до символа...

Преобразовать текст, превратив строчные буквы в заглавные, а заглавные в строчные
Дана последовательность заглавных и строчных латинских букв (строка текста)....

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

Заменить латинские буквы на заглавные
Дана строка, состоящая из латинских символов. Заменить первую букву и буквы...

Заменить строчные буквы на заглавные
Заменить строчные буквы на заглавные segst segment para stack 'stack' ...

3
proc3nt
волшебник
652 / 512 / 153
Регистрация: 26.05.2012
Сообщений: 1,439
07.12.2016, 03:14 2
Лучший ответ Сообщение было отмечено Raibec как решение

Решение

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
.model small
.386
 
.stack 100h
 
.data
mytext db 'ababab'
len equ $-mytext
 
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
 
cld
mov al,'a'
lea si,mytext
mov cx,len
search:
repne scasb
 
or cx,cx
jz next
 
push di
push cx
 
shift:
mov ah,byte ptr [di]
mov byte ptr [di-1],ah
 
inc di
loop shift
 
pop cx
 
dec di
 
mov byte ptr [di],'$'
 
pop di
dec di
 
jmp search 
 
next:
lea si,mytext
change:
lodsb
 
cmp al,'$'
je exit
 
cmp al,'b'
jne skip
 
mov byte ptr [si-1],'B'
 
skip:
jmp change 
 
exit:
mov ah,4Ch
mov al,00h
int 21h
end start
0
Raibec
0 / 0 / 1
Регистрация: 08.12.2014
Сообщений: 14
07.12.2016, 12:51  [ТС] 3
proc3nt, Как добавить вывод входной и выходной строки?
0
R71MT
4729 / 1445 / 310
Регистрация: 29.07.2014
Сообщений: 2,480
Записей в блоге: 5
07.12.2016, 14:35 4
Цитата Сообщение от Raibec Посмотреть сообщение
буквы b поменять на B
ASCII-код заглавной буквы отличается от прописной только пятым битом.
Вывод на экран по функции(9) сервиса DOS. Вот тебе набросок на FASM'e:
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
org  100h
jmp  start
 
mytext  db    13,10,'abababababababababababab','$'
len      =    ($-mytext)-3   ;длина без CRLF и $
 
start:  mov   ah,9           ;выводим текущую строку
        mov   dx,mytext
        int   21h
 
        mov   si,mytext+2    ;источник
        mov   di,si          ;он-же приёмник
        mov   cx,len         ;длина строки
 
@01:    lodsb                ;читаем строку по-байтно
        cmp   al,'b'         ;это нужный символ?
        jne   @02            ;переход, если нет..
        and   al,11011111b   ;иначе: сбрасываем бит(5)
        stosb                ;   ..и перезапись элемента
@02:    loop  @01            ;сл.элемент..
 
        mov   al,'$'         ;вставим маркер конца для вывода (fn.09)
        stosb                ;
 
        mov   ah,9           ;выводим новую строку
        mov   dx,mytext
        int   21h
 
@exit:  xor   ax,ax          ;
        int   16h            ;
        int   20h            ;выход в DOS..
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2016, 14:35

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

Заменить заглавные буквы строчными в данном слове
Здравствуйте, помогите пожалуйста исправить код так, чтобы надпись 'HELLO, MY...

[gas] Заменить заглавные латинские буквы на цифры
Текст начинается латинской буквой и оканчивается латинской буквой. 1) Заменить...


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

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

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