张静aa 发表于 2024-11-13 15:18:13

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

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
这个是代码,求助

FishC 发表于 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进制字符并输出
    ; 这里只是举例,实际实现可以根据具体需求修改
    XORCX, CX      ; 清空CX寄存器,用作计数
    MOVBX, 16      ; 进制值为16

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: VSCODE运行汇编程序运行无错误但是不输出结果