鱼C论坛

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

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

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

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

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

x
  1. DATA SEGMENT
  2.         ;定义变量
  3.         X        DW        1122H
  4.         Y        DW        3344H
  5.         Z        DW        ?
  6. DATA ENDS

  7. STACK SEGMENT STACK
  8.         DB 200 DUP(?)
  9. STACK ENDS

  10. CODE SEGMENT
  11.         ;定义堆栈大小(例如,200字节)
  12.         ASSUME DS:DATA,CS:CODE,SS:STACK
  13. START:
  14.         MOV        AX,DATA
  15.         MOV        DS,AX
  16.         MOV        AX,STACK
  17.         MOV        SS,AX
  18.        
  19.         MOV        AX,X
  20.         ADD        AX,Y
  21.         MOV        Z,AX
  22.        
  23.         MOV AH,4CH
  24.         INT 21H
  25. CODE ENDS
  26. END START
复制代码

这个是代码,求助
小甲鱼最新课程 -> https://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这样的仿真器运行。

如果确实需要输出结果并查看:

  1. CODE SEGMENT
  2. ASSUME DS:DATA, CS:CODE, SS:STACK
  3. START:
  4.     MOV     AX, DATA
  5.     MOV     DS, AX
  6.     MOV     AX, STACK
  7.     MOV     SS, AX

  8.     MOV     AX, X
  9.     ADD     AX, Y
  10.     MOV     Z, AX

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

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

  15.     MOV     AH, 4CH
  16.     INT     21H

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

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

  31.     PRINT_LOOP:
  32.         POP DX
  33.         ADD DL, '0'
  34.         CMP DL, '9'
  35.         JBE  DIRECT_OUT
  36.         ADD DL, 'A' - '9' - 1
  37.     DIRECT_OUT:
  38.         INT 21H
  39.         LOOP PRINT_LOOP
  40.     RET
  41. PrintHex ENDP
  42. CODE ENDS
  43. END START
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 15:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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