Срочно нужна помощь в Tasm( язык ассемблер).
Написать программу сколько в массиве чисел больше 12h и меньше 0Ah. Массив байт.
Написать программу сколько в массиве чисел больше 12h и меньше 0Ah. Массив байт.
title N88989952
ideal
model small
stack 100h
dataseg
Msg1 db 'Дан массив длиной $'
Msg2 db ':',13,10,36
Msg3 db 13,10,10,'Кол-во искомых элементов: $'
Seed dw ?
Len dw ?
Array dw ?
DataLen = ($ - Msg1 + 15) shr 4
codeseg
Start:
startupcode
mov ah,62h
int 21h
mov es,bx
mov ah,4Ah
mov bx,CodeLen+DataLen+10h
int 21h
call Randomize
call Random stdcall,361
add ax,40
mov [Len],ax
add ax,15
shr ax,4
mov bx,ax
mov ah,48h
int 21h
mov [Array],ax
mov es,ax
mov ah,9
lea dx,[Msg1]
int 21h
call OutDec stdcall,[Len]
mov ah,9
lea dx,[Msg2]
int 21h
mov cx,[Len]
xor di,di
CreateLoop:
call Random stdcall,256
stosb
call OutByteHex stdcall,ax
loop CreateLoop
mov cx,[Len]
xor si,si
mov bx,si
mov dx,si
CountLoop:
mov al,es:[si]
inc si
cmp al,0Ah
jb Less
cmp al,12h+1
cmc
Less:
rcl bl,1
and bl,1
add dx,bx
loop CountLoop
push dx
mov ah,9
lea dx,[Msg3]
int 21h
call OutDec
mov ax,[Array]
mov es,ax
mov ah,49h
int 21h
xor ah,ah
int 16h
exitcode 0
proc OutDec stdcall uses dx bx, x :word
mov ax,x
mov bx,10
xor dx,dx
div bx
test ax,ax
jz OutDec2
call OutDec stdcall, ax
OutDec2:
mov al,dl
or al,30h
int 29h
ret
endp
proc OutByteHex stdcall uses ax, x :byte
mov al,20h
int 29h
int 29h
mov al,x
rol al,4
call Hex
mov al,x
call Hex
ret
endp
proc Hex
and al,0Fh
cmp al,9
jbe Hex2
add al,7
Hex2:
add al,30h
int 29h
ret
endp
proc Random stdcall uses dx, n: word
mov ax,[Seed]
mov dx,75
mul dx
inc ax
mov [Seed],ax
mul n
mov ax,dx
ret
endp
proc Randomize
mov ah,2Ch
int 21h
mov bx,60
mov al,ch
mul bl
xor ch,ch
add ax,cx
mov cl,dh
mov ch,dl
mul bx
add ax,cx
mov [Seed],ax
ret
endp
CodeLen = ($ - Start + 15) shr 4
end