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 |