Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Исследование последовательности

Вопрос:
Дано целое число 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'

   Вперёд
   Содержание