ХАНДЫФАР
Программа которая ищет в строке гласные буквы и заменяет их на символ подчёркивания.
title
Автор: Довгополов Евгений Сергеевич
.
model
small
.
stack
100
h
data
segment
public
____
string
db
_
"Microsoft Macro "
___________
db
_
"Assembler$"
____
strlen
equ
(
$
-
string
)
____
vowels
db
_
"aeiou"
____
vowlen
equ
(
$
-
vowels
)
data
ends
code
segment
public
____
assume
ds
:
data
,
cs
:
code
____
main
proc
________
mov
____
ax
,
seg
data
________
mov
____
ds
,
ax
________
mov
____
es
,
ax
________
mov
____
cx
,
strlen
________
lea
____
di
,
es
:
[
vowels
]
________
lea
____
si
,
ds
:
[
string
]
____
MainLoop
:
________
push
___
cx
________
push
___
di
________
mov
____
cx
,
vowlen
________
lodsb
__
repnz
scasb
________
jne
____
Skip
________
mov
____
byte ptr
[
si
-
1
]
,
5F
h
____
Skip
:
________
pop
____
di
________
pop
____
cx
________
loop
___
MainLoop
________
mov
____
ah
,
09
h
________
lea
____
dx
,
ds
:
[
string
]
________
int
____
21h
________
mov
____
ax
,
4C00
h
________
int
____
21h
____
main
endp
code
ends
end
main
Программа которая ищет в строке гласные буквы и заменяет их на символ подчёркивания.
title
Автор: Довгополов Евгений Сергеевич
.
model
small
.
stack
100
h
data
segment
public
____
string
db
_
"Microsoft Macro Assembler$"
____
strlen
equ
(
$
-
string
)
; Вычисляем длину массива string
____
vowels
db
_
"aeiou"
____
vowlen
equ
(
$
-
vowels
)
; Вычисляем длину массива vowels
data
ends
code
segment
public
_________________
; Начало сегмента кода
____
assume
ds
:
data
,
cs
:
code
____
main
proc
_______________________
; Начало процедуры main
________
mov
____
ax
,
seg
data
_________
; Получаем адрес сегмента памяти данных и сохраняем его в ax
________
mov
____
ds
,
ax
_______________
; Передаём адрес сегмента памяти данных из регистра ax в ds
________
mov
____
es
,
ax
_______________
; Передаём адрес сегмента памяти данных из регистра ax в es
________
mov
____
cx
,
strlen
___________
; Копируем значение переменной strlen в регистр cx
________
lea
____
di
,
es
:
[
vowels
]
______
; Загружаем адрес массива vowels в регистр es:di
________
lea
____
si
,
ds
:
[
string
]
______
; Загружаем адрес массива string в регистр ds:si
____
MainLoop
:
________
push
___
cx
___________________
; Сохраняем значение регистра cx в стеке
________
push
___
di
___________________
; Сохраняем значение регистра di в стеке
________
mov
____
cx
,
vowlen
___________
; Копируем значение переменной vowlen в регистр cx
________
lodsb
________________________
; Загружаем байт из регистра-источника si в регистр al. SI++
__
repnz
scasb
________________________
; Сканируем байт в регистре al с байтом в регистре es:di
________
jne
____
Skip
_________________
; Если ZF=0, то прыгаем на метку Skip
________
mov
____
byte ptr
[
si
-
1
]
,
5F
h
__
; Копируем значение символа _ в регистр si-1
____
Skip
:
________
pop
____
di
___________________
; Выталкиваем сохранённое значение из стека в регистр di
________
pop
____
cx
___________________
; Выталкиваем сохранённое значение из стека в регистр cx
________
loop
___
MainLoop
_____________
; Выполняем цикл пока CX≠0
________
mov
____
ah
,
09
h
______________
; Копируем значение функции вывода строки в регистр ah
________
lea
____
dx
,
ds
:
[
string
]
______
; Загружаем адрес переменной string в регистр ds:dx
________
int
____
21h
__________________
; Вызываем прерывание
________
mov
____
ax
,
4C00
h
____________
; Копируем значение функции завершения в ah а значение в al
________
int
____
21h
__________________
; Вызываем прерывание
____
main
endp
_______________________
; Конец процедуры main
code
ends
___________________________
; Конец сегмента кода
end
main
____________________________
; Конец файла. Точкой входа указывается процедура main
8E D8
8E C0
B9 001A
8D 3E 001A
8D 36 0000
51
57
B9 0005
AC
F2 AE
75 04
C6 44 FF 5F
__
5F
59
E2 EE
B4 09
8D 16 0000
CD 21
B8 4C00
CD 21
Made on
Tilda