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

Заменить строчные буквы на прописные (UpCase)

13.11.2011, 18:27. Показов 3794. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
hi ALL плз помоги с лабораторкой
Ввести с клавиатуры строку (использовать только латинские символы). Получить новую строку преобразованием всех малых букв в большие. Вывести полученную строку на экран.
Lab5
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
    TITLE Lab5      ;Вариант 1, Ввести с клавиатуры строку 
                    ;(использовать только латинские символы). 
                    ;Получить новую строку преобразованием 
                    ;всех малых букв в большие. 
                    ;Вывести полученную строку на экран.
    .MODEL small    ;отводим под стек и под данные по 64Кб
    .STACK 100h     ;отмечаем начало сегмента стека
    .DATA           ;отмечаем начало сегмента данных
    Char DB 0
    Buf DB 255, 0, 256 DUP (0);
    .CODE           ;отмечаем начало сегмента кодов
    main PROC
    mov AX, @data   ;копируем адрес
    mov DS, AX      ;сегмента данных
    mov DX, offset Buf;считываем строку с клавиатуры
    mov AH, 0ah
    int 21h
    mov al, Buf+1   ;если считано 0 байт, то выход из
    or al, al       ;программы
    jz Exit1
    mov AH, 01h     ;считываем символ с клавиатуры
    int 21h
    mov Char, AL
    xor DX, DX
    mov CX, DX
    mov CL, Buf+1   ;задаем количество повторений (длина строки)
    cld
    mov DI, offset Buf+2
Cycle:
    scasb
    jne Next
    inc DX
Next:
    loop Cycle
Exit1:
    MOV DX,4C00h    ;выход 
    INT 21h         ;из программы
     
    main ENDP       
    END main

Не знаю как преобразовать все малые буквы в большие?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2011, 18:27
Ответы с готовыми решениями:

Заменить строчные буквы на прописные (UpCase)
Нужно ввести с клавиатуры строку. Преобразовать все малые буквы в большие. Вывести результаты на...

Заменить строчные буквы на прописные (UpCase)
6. Задана строка из смеси русских строчных и заглавных букв. Преобразовать её в строку из тех же...

Заменить строчные буквы на прописные
Задача в Ассемблере (MS DOS) 2.Ввести с клавиатуры строку. Преобразовать все малые буквы в...

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

9
1 / 1 / 0
Регистрация: 13.11.2011
Сообщений: 4
13.11.2011, 18:59 2
Смотри таблицу ASCII кодов
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
;например в al содержится символ
;проверяем входит ли он в диапазон малых латинских букв
cmp al, 61h
jb jmp jump_01
cmp al, 7Ah
ja jmp jump_01
 
;и если входит меняем на большую
xor al, 20h
jump_01:
 
;проверяем входит ли он в диапазон малых русских букв(1)
cmp al, A0h
jb jump_02
cmp al, AFh
ja jump_02
 
xor al, 20h
jump_02:
 
;проверяем входит ли он в диапазон малых русских букв(2)
cmp al, E0h
jb jump_03
cmp al, EFh
ja jump_03
 
xor al, 70h
jump_03:
1
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 36
14.11.2011, 09:25  [ТС] 3
hi Nixad огромное спасибо, в примере
Цитата Сообщение от Nixad
Assembler
1
2
3
4
5
6
7
8
9
;проверяем входит ли он в диапазон малых латинских букв
cmp al, 61h
jb jmp jump_01
cmp al, 7Ah
ja jmp jump_01
 
;и если входит меняем на большую
xor al, 20h
jump_01:
содержаться только два латинских символа или весь алфавит?
плиз проверь правильность кода, и подскажи почему результат на экран не выводится?
КОД находится ниже по ссылке LAB5
Lab5
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
        TITLE Lab5              ;Вариант 1, Ввести с клавиатуры строку 
                                        ;(использовать только латинские символы). 
                                        ;Получить новую строку преобразованием 
                                        ;всех малых букв в большие. 
                                        ;Вывести полученную строку на экран.
        .MODEL small    ;отводим под стек и под данные по 64Кб
        .STACK 100h             ;отмечаем начало сегмента стека
        .DATA                   ;отмечаем начало сегмента данных
        Char DB 0
        Buf DB 255, 0, 256 DUP (0);
        .CODE                   ;отмечаем начало сегмента кодов
        main PROC
        mov AX, @data   ;копируем адрес
        mov DS, AX              ;сегмента данных
        mov DX, offset Buf;считываем строку с клавиатуры
        mov AH, 0ah
        int 21h
        mov al, Buf+1   ;если считано 0 байт, то выход из
        or al, al               ;программы
        jz Exit1
        mov AH, 01h             ;считываем символ с клавиатуры
        int 21h
        mov Char, AL
        xor DX, DX
        mov CX, DX
        mov CL, Buf+1   ;задаем количество повторений (длина строки)
        cld
        mov DI, offset Buf+2
Cycle:
        scasb
        ;проверяем входит ли он в диапазон малых латинских букв
        cmp al, 61h
        jb jump_01
        cmp al, 7Ah
        ja jump_01
         
        ;и если входит меняем на большую
        xor al, 20h
    jump_01:
        jne Next
        inc DX
Next:
        loop Cycle
Exit1:
;вывод результата на экран
        mov DL,AL
        add dl,30h
        mov ah,2
        int  21h
;ожидание 
        mov ah,10h
        int 16h
        
        MOV DX,4C00h    ;выход 
        INT 21h         ;из программы
         
        main ENDP       
        END main
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
14.11.2011, 10:02 4
casper200, а должно было? Теперь сравни мой код и свой и найди
не менее 10 различий
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
; masm dos exe #
.286p
.model small    ;отводим под стек и под данные по 64Кб
.STACK 100h             ;отмечаем начало сегмента стека
.DATA                   ;отмечаем начало сегмента данных
Buf DB 255, 0, 256 DUP (0);
.CODE                   ;отмечаем начало сегмента кодов
main:   mov AX, @data   ;копируем адрес
        mov DS, AX              ;сегмента данных
        mov DX, offset Buf;считываем строку с клавиатуры
        mov AH, 0ah
        int 21h
        mov al, Buf+1   ;если считано 0 байт, то выход из
        or al, al               ;программы
        jz Exit1
        mov CH,0
        mov CL,al   ;задаем количество повторений (длина строки)
        cld
        mov SI, offset Buf+2
Cycle:  lodsb      
        cmp al,'a';проверяем входит ли он в диапазон малых латинских букв                
        jb jump_01
        cmp al,'z'
        ja jump_01
        xor byte ptr [si-1],20h;и если входит меняем на большую
jump_01:loop Cycle
;вывод результата на экран
    mov word ptr Buf,0A0Dh
    mov byte ptr [si],'$'
        mov DX, offset Buf;считываем строку с клавиатуры
        mov AH,9
        int 21h
        mov ah,0;ожидание 
        int 16h                
Exit1:  MOV ah,4Ch    ;выход 
        INT 21h         ;из программы
        END main
2
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 36
14.11.2011, 10:50  [ТС] 5
HI Mikl___ огромное спасибо,
сам бы точно не написал такое...
ща буду анализировать...

Добавлено через 42 минуты
Mikl___ - снимаю шляпу!

все изящно, различий более 10, даже 15, с некоторой транскрипцией не знаком, после Вашего примера стал изучать.
Есть вопрос , при организации вывода результата. В каждом новом проекте новое значение,
Assembler
1
 mov word ptr Buf,0A0Dh
как определить это значение 0A0Dh в том или ином случае?
.286p - этот параметр не обязателен он вообще для чего?
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
14.11.2011, 11:19 6
Цитата Сообщение от casper200 Посмотреть сообщение
.286p - этот параметр не обязателен он вообще для чего?
без этой инструкции программа компилируется как для intel 8086
mov word ptr Buf,0A0Dh -- для перехода на другую строку
Цитата Сообщение от casper200 Посмотреть сообщение
Есть вопрос , при организации вывода результата. В каждом новом проекте новое значение
-- Это вопрос? Не понял, что ты хотел сказать
2
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 36
14.11.2011, 13:47  [ТС] 7
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
;вывод результата (результат - в dl, если он меньше FFh)
mov dl,al
add dl,30h
mov ah,2
int 21h
 
;ожидание   
mov ah,10h
int 16h 
 
;вывод результата на экран
        mov word ptr Buf,0A0Dh
        mov byte ptr [si],'$' 
        mov DX, offset Buf;считываем строку с клавиатуры
        mov AH,9
        int 21h
        mov ah,0;ожидание 
        int 16h
Прокомментируй, два проекта разных...
что есть что и где в какой строке.
Вывод на экран, он из ячейки AH всегда?
0
9 / 9 / 4
Регистрация: 14.11.2011
Сообщений: 27
14.11.2011, 19:31 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    int i;
    cin>>s;
    for(i=0;i<s.length();i++)
    {
           s[i]=s[i]-32;                  
    }
    cout<<s;
    system("pause");
    return 0;
}
1
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
15.11.2011, 07:08 9
casper200,
нужно всё время лезть в учебник и разбираться самостоятельно
функция 2 прерывания 21h -- вывод на экран символа из регистра DL, предварительно из регистра AL берется число от 0 до 9 к нему добавляется код нуля и получаешь ASCII-символ соответствующий числу от 0 до 9
Assembler
1
2
3
4
5
;вывод результата (результат - в dl, если он меньше FFh)
mov dl,al; получение числа
add dl,30h; превращение числа в символ
mov ah,2 <-- номер функции
int 21h
функция 9 прерывания 21h вывод на экран строки адрес которой находится в регистре DX, выведутся все символы до символа "доллар"
Assembler
1
2
3
4
5
6
;вывод результата на экран
 mov word ptr Buf,0A0Dh; <--принудительно внесем в строку Buf перевод на другую строку экрана
        mov byte ptr [si],'$' ;<-- так мы устанавливаем конец строки
        mov DX, offset Buf;считываем строку введенную с клавиатуры
        mov AH,9<-- номер функции
        int 21h
2
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 36
15.11.2011, 13:26  [ТС] 10
hi Mikl___
оч. познавательно, понял, что нужно, учиться, учиться, и еще раз..... учиться. Без этого даже с примерами не разобраться.
0
15.11.2011, 13:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2011, 13:26
Помогаю со студенческими работами здесь

Заменить строчные буквы на прописные
Решите пожалуста! 1. Преобразовать символьную строку заданной длины, изменив все строчные буквы...

Заменить строчные буквы на прописные, цифры повторить дважды
Распечатайте введенную строку. В данной строке нужно заменить строчные буквы на прописные и...

Для массива ASCII-символов произвести сортировку, вывести только строчные буквы, прописные преобразовать в строчные
Ввести массив из произвольных ASCII-символов(цикл и 01h) и произвести её сортировку или выборку под...

Преобразовать строчные буквы в прописные
не выводит на экран конечный результат code segment assume cs:code,ds:data main...

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

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


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

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