Answer the question
In order to leave comments, you need to log in
How to determine the distance between words?
Good evening!
I'm doing a task, determining the distance between characters. I implemented it, but I'm wondering if it's really possible to determine the distance between words, you need to sort through character by character for a match?
Tell me how can I implement this?
Code to calculate distance between two characters:
data segment
msgStart db "The distance determined between the symbols: $"
msgDistance db "The distance between A and B: $"
msgInputA db 10, 13, "Insert to value A: $"
msgInputB db "Insert to value B: $"
msgNotfound db "Symbol not found$"
buffer db 255 dup ('$')
varA db 255 dup ('$')
varB db 255 dup ('$')
SerialStr db "1234567890$"
strlen equ $-SerialStr
data ends
stk segment stack
db 256 dup (?)
stk ends
code segment
assume ds:data, cs:code, ss:stk
Search proc
push bx
push cx
push dx
cld
mov cx, strlen ; загрузим в регистр кол-во символов в строке SerialStr
mov di, offset SerialStr ; вычисляем смещение (эффективный-адрес) и загружаем его в регистр
mov bx, di ; сохраним начальный адрес строки
repnz scasb ; повторяем, пока ZF != , !=0, как только ZF будет указывать на ==, == 0
jcxz nofound ; если CX = 0, прыгнем на nofound
sub di, bx ; узнаем разницу от начала строки, до найденного символа
dec di ; да - уменьшить.
mov ax, di ; загрузим в регистр ax значение
jmp sEnd
nofound:
mov dx, offset msgNotfound ; вычисляем смещение (эффективный-адрес) и загружаем его в регистр
mov ah, 9h ; вывод строки
int 21h ; прерывание DOS, получает управление, для обработки информации
jmp exit
sEnd:
pop dx
pop cx
pop bx
ret
Search endp
hex2asc proc ; Функция переводит числа в символы
push ax
push bx
push cx
push dx ; Вход: АХ = число, BX = система счисления
mov bx,10 ;
xor cx,cx ; Выход: на экране
isDiv:
xor dx,dx
div bx
push dx
inc cx
or ax,ax
jnz isDiv
isOut:
pop ax
cmp al,9
jle noHex
add al,7
noHex:
add al,30h
int 29h
loop isOut
pop dx
pop cx
pop bx
pop ax
ret
hex2asc endp
; BX - count A; CX - count B
Calc proc
cmp bx, cx ; Если A > B
ja st1 ; Перепрыгнем на A - B
; Если B > A, то B - A
sub cx, bx ; отнимем B - A
mov ax, cx ; загрузим результат в другой регистр
jmp cend ; прыгнем на выход из процедуры
st1:
sub bx, cx ; отнимем A - B
mov ax, bx ; загрузим результат в другой регистр
cend:
ret
Calc endp
main:
mov ax, data ; загрузим датасегмент в ax
mov ds, ax ; загрузим датасегмент из ax в ds
mov es, ax ; загрузим датасегмент из ax в ds
; Начало - Стартовое сообщение
mov dx, offset msgStart ; вычисляем смещение (эффективный-адрес) и загружаем его в регистр
mov ah, 9h ; вывод строки
int 21h ; прерывание DOS, получает управление, для обработки информации
mov dx, offset SerialStr ; вычисляем смещение (эффективный-адрес) и загружаем его в регистр
mov ah, 9h ; вывод строки
int 21h ; прерывание DOS, получает управление, для обработки информации
; Конец - Стартовое сообщение
; Начало - ввод А
mov dx, offset msgInputA ; вычисляем смещение (эффективный-адрес) и загружаем его в регистр
mov ah, 9h ; вывод строки
int 21h ; прерывание DOS, получает управление, для обработки информации
mov ah, 3fh ;команда на ввод
mov dx, offset varA ; загрузим адрес буффера
int 21h ;выполнить команду
; Конец - ввод А
; Начало - ввод B
mov dx, offset msgInputB ; вычисляем смещение (эффективный-адрес) и загружаем его в регистр
mov ah, 9h ; вывод строки
int 21h ; прерывание DOS, получает управление, для обработки информации
mov ah, 3fh ;команда на ввод
mov dx, offset varB ; загрузим адрес буффера
int 21h ;выполнить команду
; Конец - ввод B
mov al, varA ; загрузим в регистр искомый символ
call Search ; найдем его в строке
mov bx, ax ; загрузим результат в другой регистр
xor ax, ax ; обнулим 16-битовый регистр
mov al, varB ; загрузим в регистр искомый символ
call Search ; найдем его в строке
mov cx, ax ; загрузим результат в другой регистр
xor ax, ax ; обнулим 16-битовый регистр
; BX - count A; CX - count B
call Calc ; посчитаем расстояние
push ax ; результат подсчета в ax, сохраним в стеке
mov dx, offset msgDistance ; вычисляем смещение (эффективный-адрес) и загружаем его в регистр
mov ah, 9h ; вывод строки
int 21h ; прерывание DOS, получает управление, для обработки информации
pop ax ; вернем результат подсчета обратно
call hex2asc ; выведем в консоль содержимое регистра ax
exit:
mov ax, 4c00h
int 21h
code ends
end main
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question