У меня есть уравнение, которое я хочу смоделировать на языке ассемблера. Я написал следующий код, который синтаксически корректен, но приводит к неправильным результатам в регистре. Конечный результат должен быть сохранен в регистре DX. Уравнение Я моделирование:Неправильный расчет математического уравнения в языке Assembly (Intel)
DX = (AX + (AX -1) + 2 * (AX +2))/2
Ниже приведен код на языке ассемблера для микропроцессора Intel:
[org 0x0100]
jmp start
number: db 02
multiplicand: db 0
multiplier: db 0
multiResult: dw 0
squareResult: dd 0
square: mov [multiplicand], AX
mov [multiplier], AX
call multi
mov AX, [multiResult]
mov [squareResult], AX
ret
multi: mov CL, 8
mov BX, [multiplicand]
mov DX, [multiplier]
carryCheck: shr BX, 1
jnc skip
add [multiResult], BX
skip: shl BX, 1
dec CL
jnz carryCheck
ret
start: mov AX, [number]
call square
mov DX, [squareResult]
sub byte[number], 1
add DX, AX
add byte[number], 2
mov AX, [number]
mov [multiplicand],AX
mov byte[multiplier], 2
call multi
add DX, [multiResult]
shr DX, 1 ; division by 2
mov AX, 0x4c00 ;ending program
int 0x21
Когда вы используете отладчик для выполнения кода, вы не можете определить место, где оно не удается? –
У вас есть только хранилище байтов 'db', но чтение и запись' AX' и других 16-разрядных регистров: столкновение. 'db' ==>' dw'. –
Почему вы не используете комментарии в своем ассемблере? –