ХАНДЫФАР
Программа которая объединяет две строки в одну.
title
Автор: Довгополов Евгений Сергеевич
.
model
small
.
stack
100
h
data
segment
public
____
string1
db
_
"Microsoft $"
,
20
dup
(
?
)
____
string2
db
_
"Macro Assembler$"
____
strlen2
equ
(
$
-
string2
)
data
ends
code
segment
public
____
assume
ds
:
data
,
cs
:
code
____
main
proc
________
mov
____
ax
,
seg
data
________
mov
____
ds
,
ax
________
mov
____
es
,
ax
________
mov
____
cx
,
0
FFFF
h
________
mov
____
al
,
24
h
________
lea
____
di
,
es
:
[
string1
]
________
lea
____
si
,
ds
:
[
string2
]
__
repnz
scasb
________
dec
____
di
________
mov
____
cx
,
strlen2
__
repnz
movsb
________
mov
____
ah
,
09
h
________
lea
____
dx
,
ds
:
[
string1
]
________
int
____
21h
________
mov
____
ax
,
4C00
h
________
int
____
21h
____
main
endp
code
ends
end
main
Программа которая объединяет две строки в одну.
title
Автор: Довгополов Евгений Сергеевич
.
model
small
.
stack
100
h
data
segment
public
____
string1
db
_
"Microsoft $"
,
20
dup
(
?
)
____
string2
db
_
"Macro Assembler$"
____
strlen2
equ
(
$
-
string2
)
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
,
0
FFFF
h
________
; Устанавливаем счётчик равным -1
________
mov
____
al
,
24
h
___________
; Копируем значение завершения строки ($) в регистр al
________
lea
____
di
,
es
:
[
string1
]
__
; Загружаем адрес переменной string1 в регистр-приёмник es:di
________
lea
____
si
,
ds
:
[
string2
]
__
; Загружаем адрес переменной string2 в регистр-источник ds:si
__
repnz
scasb
_____________________
; Сканируем байт в регистре al с байтом в регистре es:di
________
dec
____
di
________________
; Уменьшаем значение регистра di на 1. Становимся там, где был ($)
________
mov
____
cx
,
strlen2
_______
; Устанавливаем счётчик равным длине строки string2
__
repnz
movsb
_____________________
; Выполняем копирование из ds:si в es:di пока CX≠0
________
mov
____
ah
,
09
h
___________
; Копируем значение функции вывода строки в регистр ah
________
lea
____
dx
,
ds
:
[
string1
]
__
; Загружаем адрес переменной string1 в регистр ds:dx
________
int
____
21h
_______________
; Вызываем прерывание DOS
________
mov
____
ax
,
4C00
h
_________
; Копируем значение функции завершения в ah а значение в al
________
int
____
21h
_______________
; Вызываем прерывание DOS
____
main
endp
____________________
; Конец процедуры main
code
ends
________________________
; Конец сегмента кода
end
main
_________________________
; Конец файла. Точкой входа указывается процедура main
8E D8
8E C0
B9 FFFF
B0 24
8D 3E 0000
__
8D 36 001F
F2 AE
4F
B9 0010
F2 A4
B4 09
8D 16 0000
CD 21
B8 4C00
CD 21
Made on
Tilda