我正在尝试求解等式:例如,汇编语言中的7 *(4 + 10)+(15/5)。我认为BEDMAS主体仍然适用,但是我运行的代码没有给我正确的数值?我不确定我要去哪里错。当我们调用DIV
时,它不会自动将AX
寄存器中的值除吗?
MOV BX,10
ADD BX,4
MOV AX,15
MOV BL,5
DIV BL
ADD AX,BX
MOV BX, 7
MUL BX
HLT
答案 0 :(得分:0)
private VehicleContext _vehicleContext; private IMailService _mailService; private IConfigurationRoot _config; public HomeController(IMailService mailService_, IConfigurationRoot config_, VehicleContext vehicleContext_) { _vehicleContext = vehicleContext_; _mailService = mailService_; _config = config_; } public IActionResult Index() { var vehicleData = _vehicleContext.VehicleMakes.ToList(); return View(); }
除其他一些缺陷外,该计算甚至不遵循正常的代数规则。 当任务要求( 7 *(4)时,您已经计算出7 * ((4 + 10)+(15/5)) + 10)) +(15/5)
MOV BX,10
ADD BX,4
MOV AX,15
MOV BL,5 <<<< This overwrite the sum 10 + 4 in BX
DIV BL
ADD AX,BX <<<< Luckily remainder was zero
MOV BX, 7
MUL BX <<<< Needlessly clobbers DX
中产生商,但在AL
中产生余数。此任务要求您继续忽略所有余数的商。您的代码未明确将AH
设为零,这对于通用解决方案还不够好!幸运的是15/5得出余数= 0。乘法前除法的解决方案:
AH
除法前相乘的解决方案:
mov ax, 15
mov bl, 5 ;Divider in BL
div bl ;AX/BL -> AL=3 (remainder in AH=0)
mov bl, al ;Move to an extra register
mov al, 4
add al, 10 ;AL=14
mov ah, 7
mul ah ;AL*AH -> AX=98
add al, bl
两个解决方案都产生相同的结果(101),并且仅使用2个寄存器(mov al, 4
add al, 10 ;AL=14
mov ah, 7
mul ah ;AL*AH -> AX=98
mov bh, al ;Move to an extra register
mov ax, 15
mov bl, 5 ;Divider in BL
div bl ;AX/BL -> AL=3 (remainder in AH=0)
add al, bh
和AX
)。