У меня много проблем, когда я пытался внедрить функции в сборку 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.