> какой командой выводится минимальное число?
и какой командой определить позицию чисел?
Вы наверное так шутите. Одной командой в ассемблере не обойтись. (Ещё остаётся вопрос: в каком ассемблере)
.686
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib
Random proto
.stack 100h
.data
Msg1 db 'Дан массив A[%i]:',13,10,0
Msg2 db 13,10,10,'Минимальный элемент в нечётной позиции: A[%i] = %0.2f',13,10
db 'Для завершения работы нажмите любую клавишу... ',0
Frmt db '%8.2f',0
Const1 dq 199.98
Const2 dq 99.99
.data?
Seed dd ?
IntBuf dd ?
Len dd ?
Sum dd ?
Array dd ?
.code
N90978173:
rdtsc
mov Seed,eax
finit
fstcw word ptr IntBuf
or word ptr IntBuf,0C00h
fldcw word ptr IntBuf
invoke Random
mov dword ptr IntBuf,91
fimul IntBuf
fistp Len
add dword ptr Len,10
mov eax,Len
shl eax,3
invoke VirtualAlloc,NULL,eax,MEM_COMMIT,PAGE_READWRITE
mov Array,eax
invoke crt_printf,addr Msg1,Len
mov ecx,Len
mov ebx,Array
xor esi,esi
@@:
push ecx
invoke Random
fmul Const1
fsub Const2
fstp qword ptr [ebx+esi*8]
invoke crt_printf,addr Frmt,dword ptr [ebx+esi*8],dword ptr [ebx+esi*8+4]
inc esi
pop ecx
loop @B
xor edi,edi
mov esi,2
mov eax,Len
mov ecx,eax
and eax,1
shr ecx,1
add ecx,eax
dec ecx
FindMin:
fld qword ptr [ebx+edi*8]
fld qword ptr [ebx+esi*8]
fucomip st,st(1)
ffree st
jae @F
mov edi,esi
@@:
add esi,2
loop FindMin
mov eax,edi
inc eax
invoke crt_printf,addr Msg2,eax,dword ptr [ebx+edi*8],dword ptr [ebx+edi*8+4]
invoke crt__getch
invoke VirtualFree,Array,NULL,MEM_RELEASE
invoke ExitProcess,NULL
Random proc uses eax edx
local Const :qword
local Buff :qword
mov eax,3DFh shl 20
mov dword ptr Const+4,eax
xor eax,eax
mov dword ptr Const,eax
mov dword ptr Buff+4,eax
mov eax,Seed
mov edx,08088405h
mul edx
inc eax
mov Seed,eax
mov dword ptr Buff, eax
fild Buff
fld Const
fmul
ret
Random endp
end N90978173