鱼C论坛

 找回密码
 立即注册
查看: 143|回复: 1

VSCODE运行汇编程序运行无错误但是不输出结果

[复制链接]
发表于 2024-11-13 15:18:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
DATA SEGMENT
        ;定义变量
        X        DW        1122H
        Y        DW        3344H
        Z        DW        ?
DATA ENDS
 
STACK SEGMENT STACK
        DB 200 DUP(?)
STACK ENDS
 
CODE SEGMENT
        ;定义堆栈大小(例如,200字节)
        ASSUME DS:DATA,CS:CODE,SS:STACK
START:
        MOV        AX,DATA
        MOV        DS,AX
        MOV        AX,STACK
        MOV        SS,AX
        
        MOV        AX,X
        ADD        AX,Y
        MOV        Z,AX
        
        MOV AH,4CH
        INT 21H
CODE ENDS
END START
这个是代码,求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-13 15:18:37 | 显示全部楼层
从代码上看,程序的基本流程是正确的,但可能有部分问题需要确认或调整:

1. **检查输出方式**:目前的代码只是将结果存储在Z中,并没有进一步的输出指令。如果要打印或查看结果,需要使用中断服务或者其他输出方式。

2. **确保环境支持**:确认VSCODE的环境已经正确配置,支持运行x86汇编。此外,确保汇编器(如MASM、TASM等)和链接器(如LINK)已正确安装和配置。

3. **调试工具**:可以使用调试工具(如IDE提供的内存查看功能或GDB等)查看变量Z的值,以确认结果是否正确计算。

4. **虚拟机或仿真器**:如果是在64位操作系统下运行DOS 16位程序,可能需要借助DOSBox这样的仿真器运行。

如果确实需要输出结果并查看:
CODE SEGMENT
ASSUME DS:DATA, CS:CODE, SS:STACK
START:
    MOV     AX, DATA
    MOV     DS, AX
    MOV     AX, STACK
    MOV     SS, AX

    MOV     AX, X
    ADD     AX, Y
    MOV     Z, AX

    ; 输出 Z 的值,通过 DOS 中断进行简单显示
    ; 此部分是显示16进制数的常用写法,仅供参考

    MOV     DX, Z         ; DX 寄存器用于中断21H AH=09显示字符串,需要先将值转化为字符串
    CALL    PrintHex      ; 调用自定义的16进制打印程序

    MOV     AH, 4CH
    INT     21H

PrintHex PROC
    ; 简单方法,将16位数字转为16进制字符并输出
    ; 这里只是举例,实际实现可以根据具体需求修改
    XOR  CX, CX        ; 清空CX寄存器,用作计数
    MOV  BX, 16        ; 进制值为16

    LOOP_PRINT:
        XOR  DX, DX    ; 清空DX
        DIV  BX        ; AX 除以 16
        PUSH DX        ; 保存余数(0-F)
        INC CX         ; 计数+1
        OR   AX, AX
        JNZ  LOOP_PRINT
        
    MOV AH, 02H        ; DOS功能调用 AH = 2,为输出字符

    PRINT_LOOP:
        POP DX
        ADD DL, '0'
        CMP DL, '9'
        JBE  DIRECT_OUT
        ADD DL, 'A' - '9' - 1
    DIRECT_OUT:
        INT 21H
        LOOP PRINT_LOOP
    RET
PrintHex ENDP
CODE ENDS
END START

请根据具体环境、需求,可能需要调整以上代码中的细节部分。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-21 21:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表