You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:汇编语言实现两输入数除法(计算车辆油耗)

汇编除法运算(每加仑英里数计算)问题修正

代码中的核心错误

  • 输入值存储逻辑颠倒:atod string 执行后,输入的整数会存在 eax 寄存器中,但你写的是 mov eax, number1(把内存中未初始化的number1值加载到eax),正确操作应该是 mov number1, eax(把eax里的输入值存入number1)。第二个输入同理,需改为 mov number2, eax 而非 mov ebx, number2。
  • 除法操作数配置错误:你需要计算「满箱英里数(number2) ÷ 油箱加仑数(number1)」,x86架构的div指令要求32位除法的被除数存储在edx:eax寄存器对中,除数为操作数。因此必须将number2加载到eax,number1加载到ebx,且执行div前必须清零edx(避免被除数包含垃圾值)。
  • 结果转换对象错误:div执行后,计算得到的商(每加仑英里数)会存在eax中,你却把ebx(除数)传给dtoa函数,应该传递eax来转换正确的计算结果。

修正后的完整代码

.586
.MODEL FLAT

INCLUDE io.h            ; header file for input/output

.STACK 4096

.DATA
number1 DWORD   ?
number2 DWORD   ?

prompt1 BYTE    "Enter the number of gallons of gas the car can hold:", 0
prompt2 BYTE    "Enter the number of miles you can drive on a full tank", 0

string  BYTE    40 DUP (?)
resultLxx BYTE  "The miles per gallon your car gets is:", 0
mpg     BYTE    11 DUP (?), 0

.CODE
_MainProc PROC
        ; 读取油箱加仑数并存储
        input   prompt1, string, 40      ; 读取ASCII字符串
        atod    string                   ; 转换为整数,结果在eax
        mov     number1, eax             ; 将输入值存入number1

        ; 读取满箱英里数并存储
        input   prompt2, string, 40      ; 读取ASCII字符串
        atod    string                   ; 转换为整数,结果在eax
        mov     number2, eax             ; 将输入值存入number2

        ; 执行除法:number2 ÷ number1
        mov     eax, number2             ; 被除数(英里数)放入eax
        mov     ebx, number1             ; 除数(加仑数)放入ebx
        mov     edx, 0                   ; 32位除法需清零edx,组成edx:eax作为被除数
        div     ebx                      ; edx:eax ÷ ebx,商在eax,余数在edx

        ; 转换结果为字符串并输出
        dtoa    mpg, eax                 ; 将商(每加仑英里数)转为ASCII字符串
        output  resultLxx, mpg           ; 输出结果

        mov     eax, 0                   ; 退出,返回码0
        ret
_MainProc ENDP
END                                     ; 源文件结束

关键步骤说明

  1. 输入处理:每次atod转换完成后,立即把eax中的输入值存入对应内存变量,确保输入数据被正确持久化。
  2. 除法准备:明确被除数和除数的存放位置,清零edx是32位除法的必要操作,否则div会把edx中的垃圾值当作被除数的高32位,导致计算完全错误。
  3. 结果转换与输出:div执行后,商(即每加仑英里数)存储在eax中,将其传入dtoa转换为字符串后,再通过output指令输出结果。

内容的提问来源于stack exchange,提问作者gonedrac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:50:49