;11455
;1334
;1=3
;4=2
format mz
begin:
mov ax,cs
mov ds,ax
mov es,ax
cld ;установили направление поика
mov si,mass1
;;;;;;;;;;;;;;;;;
mov cx,2 ;???????????????????????????
mov ax,[kolm1]
mul cx
mov [endmas],ax ;???????????????????????????
add [endmas],si
LODSW
mpoisk:
mov cx,[kolm2]
mov di,mass2
call poisk
cmp dx,0
je net
;------------
mov bx,ax
@@:
inc dx
LODSW
cmp si,[endmas]
ja @f
cmp ax,bx
je @r
@@:
push ax
mov ax,bx ;???????????????????????????
call vuvrez
pop ax
cmp si,[endmas]
ja exitp
;------------
jmp vso
net:
mov bx,ax
@@:
inc dx ;???????????????????????????
LODSW
cmp si,[endmas]
ja exitp
cmp ax,bx
je @r
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vso:
jmp mpoisk
exitp:
mov ah,0x4C ;эта функция завершает программу
mov al,0 ;код возврата 0
int 0x21 ;вызываем ядро операционной системы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;========================= данные в массиве
endl db 10,13,'$'
mass1 dw 1,2,3,3,3,6,7,80,90,100
;mass1 dw 1,1,4,5,5
mass2 dw 1,2,3,40,50,60,70,80,90,90,100
;mass2 dw 1,3,3,4
kolm1 dw 10 ;количество элементов первого масива
kolm2 dw 11;количество элементов второго масива
endmas dw ?
buf db 10 dup (0)
;-------------------------------------------
;выводим результат
vuvrez:
;ах = элемент масива
;dx = число его повторений
push cx
push si
push di
push bx
push dx
mov si,buf
call dgtTostr
mov ah,9
mov dx,buf ;???????????????????????????
int 21h
mov ah,2
mov dl,'='
int 21h
pop ax
mov si,buf
call dgtTostr
mov ah,9
mov dx,buf
int 21h
mov ah,9
mov dx,endl
int 21h
pop bx
pop di
pop si
pop cx
ret
;===========================================
;метод переводит число в строку
dgtTostr: ;число в строку
;ax=число
;si=строка
mov dl,'$'
push dx
vuv_chisla_s:
mov dx,0
mov bx,10
div bx
add dl,30h
push dx
cmp ax,0
jne vuv_chisla_s
; ;теперь числа вынимаеи из стека
gopop:
pop dx
mov [si],dl
cmp dl,'$'
pushf
inc si ;???????????????????????????
popf
jne gopop
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;метод возвращяет количество элементов в данном масиве
;;c учетом что масив отсортирован в возрастающем порядке
;;di - начало масива
;;ax элемент поиска
;;cx -количество элементов в масиве
;;вернем количество в dx
poisk:
xor dx,dx
;mov di,mass1
;mov ax,3
;mov cx,9
inc cx
repnz SCASW ;пока не равно повторяем
jne .exit
mov dx,cx
repe SCASW ;повторяем пока равно
sub dx,cx
.exit:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|