.data
conTitle DB "Counting of separate int in array", 0
mesl DB "Array: ", 0
len_mesl EQU $-mesl
mes2 DB Odh, Oah, "Number = ", 0
len_mes2 EQU $-mes2
mes3 DB Odh, Oah, "Found times = ", 0
len mes3 EQU $-mes3
charBuf DB ", 0
len charBuf DD $-charBuf
iarray DD • -9, 3, -5, 2,
larray EQU ($-iarray)/4
lpFmt DB "%d", 0
cnt DD 0
num DD • -5
readBuf DB
lenReadBuf DD 1
hStdln DD 0
hStdOut DD 0
chrsRead DD 0
chrsWritten DD 0
STD_INP_HNDL DD • -10
STD OUTP HNDL DD • -11
.code
start:
call AiiocConsoie
test EAX, EAX
j z ex
push offset conTitle
call SetConsoleTitleA
call getout_hndl
call getinp_hndl
push EBX
mov EBX, offset mesl
mov ECX, len_mesl
call write_con
pop EBX
mov ESI, offset iarray
mov ECX, larray
show_next:
push ESI
push ЕСХ
push DWORD PTR [ESI]
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
mov EBX, offset charBuf
mov ECX, len_charBuf
call clear_buf
pop ECX
pop ESI
add ESI, 4
loop show_next
mov EBX, offset mes2
mov ECX, len_mes2
push DWORD PTR num
; подсчитать, сколько раз встречается элемент в массиве
mov DWORD PTR cnt, О
lea ESI, iarray
f init
; загрузка исходного числа в вершину стека сопроцессора
fild DWORD PTR num
next_cmp:
ficom DWORD PTR [ESI]
fstsw AX
sahf
jne skip
; если значение в вершине стека равно элементу массива,
; увеличить содержимое счетчика
inc cnt
skip:
loop next_cmp
; преобразовать результат подсчета в строку
push DWORD PTR cnt
mov EBX, offset mes3
mov ECX, len_mes3
call clear buf
Объяснение:
.data
conTitle DB "Counting of separate int in array", 0
mesl DB "Array: ", 0
len_mesl EQU $-mesl
mes2 DB Odh, Oah, "Number = ", 0
len_mes2 EQU $-mes2
mes3 DB Odh, Oah, "Found times = ", 0
len mes3 EQU $-mes3
charBuf DB ", 0
len charBuf DD $-charBuf
iarray DD • -9, 3, -5, 2,
larray EQU ($-iarray)/4
lpFmt DB "%d", 0
cnt DD 0
num DD • -5
readBuf DB
lenReadBuf DD 1
hStdln DD 0
hStdOut DD 0
chrsRead DD 0
chrsWritten DD 0
STD_INP_HNDL DD • -10
STD OUTP HNDL DD • -11
.code
start:
call AiiocConsoie
test EAX, EAX
j z ex
push offset conTitle
call SetConsoleTitleA
test EAX, EAX
j z ex
call getout_hndl
call getinp_hndl
push EBX
mov EBX, offset mesl
mov ECX, len_mesl
call write_con
pop EBX
mov ESI, offset iarray
mov ECX, larray
show_next:
push ESI
push ЕСХ
push DWORD PTR [ESI]
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
push EBX
mov EBX, offset charBuf
mov ECX, len_charBuf
call write_con
pop EBX
call clear_buf
pop ECX
pop ESI
add ESI, 4
loop show_next
push EBX
mov EBX, offset mes2
mov ECX, len_mes2
call write_con
pop EBX
push DWORD PTR num
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
push EBX
mov EBX, offset charBuf
mov ECX, len_charBuf
call write_con
pop EBX
; подсчитать, сколько раз встречается элемент в массиве
mov DWORD PTR cnt, О
lea ESI, iarray
mov ECX, larray
f init
; загрузка исходного числа в вершину стека сопроцессора
fild DWORD PTR num
next_cmp:
ficom DWORD PTR [ESI]
fstsw AX
sahf
jne skip
; если значение в вершине стека равно элементу массива,
; увеличить содержимое счетчика
inc cnt
skip:
add ESI, 4
loop next_cmp
; преобразовать результат подсчета в строку
push DWORD PTR cnt
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
push EBX
mov EBX, offset mes3
mov ECX, len_mes3
call write_con
pop EBX
push EBX
mov EBX, offset charBuf
mov ECX, len_charBuf
call write_con
pop EBX
call clear buf
Объяснение: