|
Ассемблер в примерах - Исследование последовательности
- Вопрос:
- Дано целое число N и набор из N вещественных чисел. Проверить, образует ли данный набор убывающую последовательность. Если образует, то вывести True, если нет - вывести False.
- Ответ:
-
В приложении реализация задачи на компиляторе fasm для ОС Windows.
Элементы последовательности заданы статически в коде программы.
format PE GUI 4.0
entry start
include '%fasminc%\win32wx.inc'
include '%fasminc%\encoding\win1251.inc'
section '.data' data readable writeable
szTitle TCHAR 'Result',0
szTrue TCHAR 'True',0
szFalse TCHAR 'False',0
align 16
array dq 15.8f, 13.2f, 5.65f, 0.55f,10.0f
count = ($-array)/8
section '.text' code readable executable
start:
mov ecx, count-1 ; Количество операций сравнения
lea esi, [array] ; Указатель на элемент массива
finit ; Подготовка FPU
start_loop:
fld qword [esi] ; Загрузка числа в st0 FPU
add esi, 8 ; Перемещение указателя
fcomp qword [esi] ; Сравнения st0 и числа на которое указывает esi
fstsw ax ; Слово состояния FPU помещяеться в регистр ax
sahf ; Регистр ax копируеться в регистр флагов CPU
jna false ; Выход из цикла если текущее число больше предидущего
dec ecx ; Декримент счётчика
jnz start_loop ; Переход на начало цикла, если ecx не равен нулю
invoke MessageBox, 0, szTrue, szTitle, MB_OK ; Вывод True
jmp exit ; Переход на выход
false:
invoke MessageBox, 0, szFalse, szTitle, MB_OK ; Вывод False
exit:
invoke ExitProcess, 0 ; Завершение программы
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include '%fasminc%\api\kernel32.inc'
include '%fasminc%\api\user32.inc'
| |