Объединение арифметических c уравнений в сборке - PullRequest
0 голосов
/ 14 марта 2020

У меня много проблем, когда я пытался внедрить функции в сборку Winx64 как новичок с базовыми c командами, такими как MOV, ADD и DIV. Моя цель - выполнить это уравнение в сборке:

Z = (X / 7) - (Y / 3)

Я изменил формулу, чтобы приравнять Z к одному члену:

Z = (3X - 7Y) / 21

Код, который у меня есть на данный момент, глядя на него, вызывает много вопросов. Выполнение умножения, вычитания и деления в одном и том же коде на ассемблере является для меня трудностью, в отличие от наличия только двух терминов для сложения, умножения, вычитания или деления.

TITLE DISPLAY
      .MODEL SMALL
      .386
      .STACK
      .DATA
X     SBYTE 4, 16, 28, 88, 100, -116, -68, -104, -92, 40, 52, -128, -80, -8, 64, 76, -56, -44, -32, -20
Y     SWORD 32765, -16373, -19651, -22927, 29491, 7, -3271, 26215, 6559, 16387, 13111, 9835,
3283, -6545, -9823, -13099, 22937, 19663, -26201, -29479
Z     DWORD lengthof Y dup (0)

      .CODE
MAIN  PROC FAR
      .STARTUP
      ;Program
      MOV AX, @DATA
      MOV DX, AX
      MOV SI, OFFSET X
      MOV DI, OFFSET Y
      MOV CX, LENGTHOF X 

L1:   MOV AX,0
      MOV BX,0
      MOV AX,[SI]
      MOV BX,3
      MUL BX
      MOV BX,AX
      MOV AX,[DI]
      MOV DX,7
      MUL DX
      SUB BX,AX
      MOV AX,BX
      MOV BX,21
      IDIV BX
      ADD SI,TYPE X
      ADD DI,TYPE Y
      LOOP L1
      .EXIT 
MAIN  ENDP
      END

Вот выдержка из Excel по ожидаемому значения Z.

enter image description here

...