【发布时间】:2023-03-17 07:30:01
【问题描述】:
我有一个想用汇编语言建模的方程。我编写了以下代码,它在语法上是正确的,但在寄存器中产生了错误的结果。最终结果将存储在 DX 寄存器中。我正在建模的方程是:
DX = (AX2 + (AX-1) + 2 * (AX +2)) / 2
以下是英特尔微处理器的汇编语言代码:
[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. -
为什么不在汇编代码中使用注释?
-
@WeatherVane 我应该使用所有的 dw 吗?
-
DXsquare计算的 m.s 字怎么了?毕竟,你已经分配了 4 个字节的存储空间。
标签: assembly nasm dos microprocessors x86-16