Загрузка данных


.686
  .model flat, stdcall
  option casemap :none
  
  include \masm32\include\windows.inc
  include \masm32\include\user32.inc
  include \masm32\include\kernel32.inc
  include \masm32\include\masm32.inc
  includelib \masm32\lib\user32.lib
  includelib \masm32\lib\kernel32.lib
  includelib \masm32\lib\masm32.lib
  
  .data
  ; Используем тип SWORD (signed word)
  _a      sword 70
  _b      sword 25
  _c      sword 11
  _d      sword 10
  res     sword 0
  
  format  db " Answer = %d", 0
  buffer  db 32 DUP(0)
  title_w db "Result (SWORD)", 0
  
  .code
  start:
  ; Считаем знаменатель: res = (_a * _b) - _d
  mov ax, _a
  imul ax, _b       ; ax = _a * _b
  sub ax, _d        ; ax = ax - _d
  mov res, ax       ; сохраняем знаменатель в res
  
  ; Считаем числитель: (_a * _b * _c) + _d
  mov ax, _a
  imul ax, _b       ; ax = _a * _b
  imul ax, _c       ; ax = ax * _c
  add ax, _d        ; ax = ax + _d
  
  ; Деление: ax / res
  ; Перед idiv нужно подготовить dx:ax
  cwd               ; Расширяет знак из AX в DX:AX
  idiv res          ; AX = Результат, DX = Остаток
  
  ; Сохраняем результат
  mov res, ax
  
  ; Вывод результата (преобразуем 16-битный SWORD в 32-битный для wsprintf)
  movsx eax, res    ; movsx копирует с расширением знака
  invoke wsprintf, addr buffer, addr format, eax
  
  invoke MessageBox, 0, addr buffer, addr title_w, MB_OK
  invoke ExitProcess, 0
  
  end start