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

Изменить регистр введенного символа (строки)

30.04.2011, 02:08. Показов 4030. Ответов 0
Метки нет (Все метки)

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
;Programma vvodit chislo ili simvol s klaviatury i 
;skaniruet stroku v sootvetstvii s usloviem. 
;Stroku opisat' v segmente dannyh.
;Izmenit' registr vvedennogo simvola 
;na protivopolojnyy po vsey stroke.
 
.model small
.stack 100h
.data
     priglash1 db 10, 13, 'Vvedite simvol->','$'
 
     priglash2 db 7, 10, 13, 'Vvedite stroku ->','$'
     
     vivstr db 10, 13,  'Stroka--->>> ','$'
buf db 253, ?, 253 dup ('$')  
sizeb equ $-buf
 
 
.code
start:                         
     mov  ax, @data               ; zagruzka adresa segmenta dannyh
     mov  ds, ax
;=========   Rabota s simvolom   =========
     mov  dx, offset priglash1          ; zagruzka nachal'nogo adresa stroki v dx
     mov  ah, 9h                    ; vyvod 'Vvedite simvol'     
     int 21h
     mov  ah, 1h                    ; vvod simvola
     int  21h                    ; kod simvola v al
     mov  bl, al                    ; kopiya koda simvola v bl 
;  ===========   Rabota so strokoy   =============
     mov  dx, offset priglash2     
     mov  ah, 9h                    ; vyvod 'Vvedite stroku:'     
     int  21h
     lea  dx, buf                    ; vvod stroki v buf
     mov  ah, 0Ah
     int  21h
 
 
     push ds
     pop es
     mov cx, sizeb
;============= proverka ===================== 
     mov di, offset buf
    
    x1:
     mov al, bl                 ;Esli nashli simvol 
     cmp es:[di], al            ;to vypolnyaem zamenu
     je zamena     
     X:
    inc di
    loop x1
;===========================
t:
     mov  dx, offset vivstr     
     mov ah, 9h                    
     int  21h
     lea  dx, buf+2               ; nachal'nyy adres stroki 
     mov  ah, 9h                    ; vyvod stroki iz buf     
     int  21h
 
 
 
 
mov  ah, 1                    ; zaderjka dlya obozreniya rezul'tata
     int  21h
mov  ax, 4C00h               ; zavershenie raboty
     int  21h
;*********************************************************
zamena:
 
; Opredelit', soderjit li registr AL bukvennyy simvol v kode
; ASCII, i esli simvol deystvitelen, opredelit' ego registr.
 
   ; mov byte ptr es:[di], '+'    
    
    mov       al,[di]
 
    cmp       al,"A"       ; nahoditsya simvol pod pervoy
                            ; bukvoy verhnego registra?
    jl        error        ; da, on ne yavlyaetsya bukvennym
                            ; simvolom v kode ASCII
    cmp       al,"Z"       ; nahoditsya simvol pod posledney
                            ; bukvoy verhnego  registra?
    jle       is_upper     ; da, simvol sootvetstvuet
                            ; verhnemu registru
    cmp       al,"a"       ; nahoditsya simvol pod pervoy
                            ; bukvoy nijnego registra?
    jl        error        ; da, on ne yavlyaetsya bukvennym
                            ; simvolom  v  kode ASCII
    cmp       al,"z"       ; nahoditsya simvol pod posledney
                            ; bukvoy nijnego registra?
    jle       is_lower     ; da, simvol nahoditsya v nijnem
                            ; registre
    jmp       short error  ; v protivnom sluchae, on ne yavlyaet-
                            ; sya bukvennym simvolom v kode ASCII
;
is_upper:
    mov       dl,"U"        ; pometit' simvol kak priznak
                             ; verhnego registra
    jmp       short convert_type ; i prodoljit'
is_lower:
     mov      dl,"L"        ; pometit' simvol kak priznak
                             ; nijnego registra
     jmp      short convert_type ; i prodoljit'
error:
     mov      ah,0             ; pometit' simvol kak ne bukvennyy
                    ; simvol  v  kode  ASCII
    mov [di], al
     jmp      x       ; i zavershit' vypolnenie procedury
;
convert_type:
     cmp      ah,"l"     ; izmenit'  na  nijniy registr?
     je       to_lower   ; da, poetomu izmenit' simvol
     cmp      ah,"L"     ; izmenit'  na  nijniy registr?
     je       to_lower   ; da, poetomu izmenit' simvol
     cmp      ah,"u"     ; izmenit'  na  verhniy registr?
     je       to_upper   ; da, poetomu izmenit' simvol
     cmp      ah,"U"     ; izmenit'  na  verhniy registr?
     je       to_upper   ; da, poetomu izmenit' simvol
;
;    V protivnom sluchae, izmenit' registr klaviatury
;    na protivopolojnyy
   cmp      dl,"L"      ; eto simvol nijnego registra?
   je       to_upper    ; da, izmenit' ego na verhniy registr
 ; v protivnom sluchae, eto verhniy  registr,
 ; poetomu sdelat' ego nijnim
;
to_lower:
    mov      ah,"L"     ; ustanovit' priznak registra dlya
                     ; vozvrata
    cmp      dl,ah      ; simvol uje sootvetstvuet nijnemu
      ; registru?
    je       x       ; da, deystvie vypolneno
    add      al,20h     ; v protivnom sluchae, izmenit' na
                     ; nijniy registr
    mov [di], al
    jmp      x ; i vyyti iz procedury
;
to_upper:
    mov      ah,"U"   ; ustanovit' priznak registra dlya vozvrata
    cmp      dl,ah    ; simvol uje sootvetstvuet verhnemu
                          ; registru ?
    mov [di], al
    je       x     ; da, deystvie vypolneno
    sub      al,20h   ; v protivnom sluchae, izmenit' na
                          ; verhniy  registr
    mov [di], al
    jmp x
 
end start
Надо переделать следующее: для поиска введенного символа нужно использовать строковую
команду scas.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2011, 02:08
Ответы с готовыми решениями:

Сколько элементов строки превышают код введенного символа
Имеется задача: Определить, сколько элементов строки превышают код введенного символа...

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

Программа перевода введенного символа от a до f в верхний регистр
Написать программу перевода введенного символа от a до f в верхний регистр через оператор switch

Написать программу перевода введенного символа от A до F в нижний регистр
Написать программу перевода введенного символа от A до F в нижний регистр

0
30.04.2011, 02:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2011, 02:08
Помогаю со студенческими работами здесь

Написать программу перевода введённого символа от ’a’ до ’f’ в верхний регистр
Видел такую программу на с++, нужно на си , помогите кому не сложно, в программировании разбераюсь...

Изменить регистр символа
Почему не работает вот этот код: var a, b, c, d:char; begin read (a); b:=('A'); ...

Изменить регистр символа
Измените регистр символа, если он был латинской буквой: сделайте его заглавным, если он был...

Изменить регистр символа
Измените регистр символа, если он был латинской буквой: сделайте его заглавным, если он был...


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

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