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

x86汇编实现DELTA=B²-4AC计算,运行无报错但无输出如何解决

问题原因

你的代码仅完成了b²-4ac的计算逻辑,结果存入delta变量后就直接退出进程,没有调用任何控制台输出接口,因此不会打印任何内容。

完整可运行修改代码
.386
.model flat,stdcall
.stack 4096
; 新增需要用到的Win32 API声明
ExitProcess proto,dwExitCode:dword
GetStdHandle proto, nStdHandle:dword
WriteConsoleA proto, hConsoleOutput:dword, lpBuffer:ptr byte, nNumberOfCharsToWrite:dword, lpNumberOfCharsWritten:ptr dword, lpReserved:dword
; 引入依赖库
includelib kernel32.lib

.data
delta   SDWORD ?
a   SDWORD 6
b   SDWORD 3
cc   SDWORD 4
; 新增输出相关变量
stdout dword ?            ; 控制台标准输出句柄
write_buf byte 16 dup(0)  ; 输出字符串缓冲区
write_cnt dword ?         ; 实际写入字符计数
STD_OUTPUT_HANDLE equ -11 ; 标准输出的常量标识

.code
main proc
    ; 原计算逻辑保持不变
    mov eax,a 
    mov ebx,b
    mov ecx,cc

    imul ebx,b ; b^2
    imul eax,4 ; 4a
    imul eax,cc ; 4a*c
    sub ebx,eax ; b^2-4ac
    mov delta,ebx ; delta = b^2-4ac

    ; 新增输出逻辑开始
    ; 1. 获取标准输出句柄
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov stdout, eax

    ; 2. 将delta的数值转为ASCII字符串
    mov eax, delta
    lea edi, write_buf
    ; 处理负数
    test eax, eax
    jns positive_num
    ; 负数先写入负号,再取绝对值
    mov byte ptr [edi], '-'
    inc edi
    neg eax
positive_num:
    ; 逐位转换数字,先从低位到高位存到栈里
    mov ecx, 0
convert_loop:
    mov edx, 0
    mov ebx, 10
    div ebx
    add dl, '0'
    push edx
    inc ecx
    test eax, eax
    jnz convert_loop
    ; 从栈里取出放到缓冲区,就是正常顺序
pop_loop:
    pop edx
    mov [edi], dl
    inc edi
    loop pop_loop
    ; 计算总字符长度
    sub edi, offset write_buf

    ; 3. 调用控制台输出API打印结果
    invoke WriteConsoleA, stdout, offset write_buf, edi, offset write_cnt, 0

    invoke ExitProcess,0
main endp
end main
使用说明

在VS2019中运行时按下Ctrl+F5(开始执行不调试),即可看到控制台窗口打印出计算结果,你给出的测试参数(a=6,b=3,c=4)的输出结果为-87。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:24:02