ХАНДЫФАР
Программа которая сравнивает две строки.
title
Автор: Довгополов Евгений Сергеевич
.
model
small
.
stack
100
h
data
segment
public
____
aString
____
db
_
"Hello students!$"
____
aStrLen
____
equ
(
$
-
aString
)
____
bString
____
db
_
"Hello children!$"
____
bStrLen
____
equ
(
$
-
bString
)
____
equalMsg
___
db
_
"Strings are equal!$"
____
notEqualMsg
db
_
"Strings are not "
________________
db
_
"equal!$"
____
lenNotEqual
db
"The lengths of the "
________________
db
"strings are not "
________________
db
"equal!$"
data
ends
code
segment
public
____
assume
ds
:
data
,
cs
:
code
____
main
proc
________
mov
____
ax
,
seg
data
________
mov
____
ds
,
ax
________
mov
____
es
,
ax
________
mov
____
dx
,
bStrLen
________
mov
____
cx
,
aStrLen
________
lea
____
di
,
es
:
[
bString
]
________
lea
____
si
,
ds
:
[
aString
]
________
cmp
_____
dx
,
_
cx
________
jne
____
LengthNotEqual
___
repz
cmpsb
________
jne
____
NotEqual
________
lea
____
dx
,
ds
:
[
equalMsg
]
________
jmp
____
Done
____
NotEqual
:
________
lea
____
dx
,
ds
:
[
notEqualMsg
]
________
jmp
____
Done
____
LengthNotEqual
:
________
lea
____
dx
,
ds
:
[
lenNotEqual
]
____
Done
:
________
mov
____
ah
,
09
h
________
int
____
21h
________
mov
____
ax
,
4C00
h
________
int
____
21h
____
main
endp
code
ends
end
main
Программа которая сравнивает две строки.
title
Автор: Довгополов Евгений Сергеевич
.
model
small
.
stack
100
h
data
segment
public
____
aString
____
db
_
"Hello students!$"
__________________________
; Здравствуйте, студенты!
____
aStrLen
____
equ
(
$
-
aString
)
_________________________________
; Вычисляем длину строки aString
____
bString
____
db
_
"Hello children!$"
__________________________
; Здравствуйте, дети!
____
bStrLen
____
equ
(
$
-
bString
)
_________________________________
; Вычисляем длину строки bString
____
equalMsg
___
db
_
"Strings are equal!$"
_______________________
; Строки равны!
____
notEqualMsg
db
_
"Strings are not equal!$"
___________________
; Строки не равны!
____
lenNotEqual
db
__
"The lengths of the strings are not equal!$"
_
; Строки не равной длины!
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
____
dx
,
bStrLen
___________
; Копируем значение переменной bStrLen в регистр dx
________
mov
____
cx
,
aStrLen
___________
; Копируем значение переменной aStrLen в регистр cx
________
lea
____
di
,
es
:
[
bString
]
______
; Загружаем адрес переменной bString в регистр-источник es:di
________
lea
____
si
,
ds
:
[
aString
]
______
; Загружаем адрес переменной aString в регистр-приёмник ds:si
________
cmp
_____
dx
,
_
cx
________________
; Сравниваем длины обеих строк
________
jne
____
LengthNotEqual
________
; Если ZF=0, то прыгаем на метку LengthNotEqual
___
repz
cmpsb
_________________________
; Выполняем сравнение байта в регистре si с байтом в регистре di
________
jne
____
NotEqual
______________
; Если ZF=0, то прыгаем на метку NotEqual
________
lea
____
dx
,
ds
:
[
equalMsg
]
_____
; Загружаем адрес переменной equalMsg в регистр ds:dx
________
jmp
____
Done
__________________
; Выполняем безусловный переход на метку Done
____
NotEqual
:
________
lea
____
dx
,
ds
:
[
notEqualMsg
]
__
; Загружаем адрес переменной notEqualMsg в регистр ds:dx
________
jmp
____
Done
__________________
; Выполняем безусловный переход на метку Done
____
LengthNotEqual
:
________
lea
____
dx
,
ds
:
[
lenNotEqual
]
__
; Загружаем адрес переменной lenNotEqual в регистр ds:dx
____
Done
:
________
mov
____
ah
,
09
h
_______________
; Копируем значение функции вывода строки в регистр ah
________
int
____
21h
___________________
; Вызываем прерывание
________
mov
____
ax
,
4C00
h
_____________
; Копируем значение функции завершения в ah а значение в al
________
int
____
21h
___________________
; Вызываем прерывание
____
main
endp
________________________
; Конец процедуры main
code
ends
____________________________
; Конец сегмента кода
end
main
_____________________________
; Конец файла. Точкой входа указывается процедура main
8E D8
8E C0
BA 0010
B9 0010
8D 3E 0010
__
8D 36 0000
3B D1
75 12
F3 A6
75 07
8D 16 0020
EB 0C 90
8D 16 0033
EB 05 90
8D 16 004A
B4 09
CD 21
B8 4C00
CD 21
Made on
Tilda