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