qq_39454005 2017-07-10 01:08 采纳率: 0%
浏览 1025

修改C语言程序代码的错误

void printman(int x,int y)
{
gotoxy(y,x);
_AX=02;_CX=01;_AH=0xa;
geninterrupt(0x10);
}
为什么在code blocks 里面是错误的 、
错误提示:'_AX' undeclared (first use in this function)
该怎么修改

  • 写回答

3条回答 默认 最新

  • 枫舞的季节 2017-07-10 01:27
    关注

    _AX , _CX , _AH 是寄存器,geninterrupt(0x10); 是调用中断 0x10 。 估计只能在DOS 或者WINDOWS95 WIN31 等系统下运行,而 CodeBlocks不是一个编译器,只是运行IDE,它依赖于其他的编译器 比如 MinGW VC++ ,而这些编译器中默认没有 _AX , _CX , _AH 这些寄存器变量。所以报错说没有定义这些变量。要使用这些寄存器,有两种方式:
    1 嵌入汇编指令
    2 使用汇编语言,编译为 obj 然后链接到exe 中。

    如果 codeblocks 调用 VS 那么可以 用
    __asm {
    mov ax,02
    mov cx,01
    mov ah,0ah
    int 10
    }
    但是vs代码只是32位程序支持,64位不支持。
    如果使用 MinGW 它支持嵌入AT&T 汇编,你可以百度一下它的格式。

    但是你这段代码估计在win xp win7 win8 win10 上 不允许调用 int 10h 中断,会引发异常(在win10上试了,不行,其他系统没验证)

    做一个dos 虚拟机,或者 win95虚拟机实验一下。应该能通过。

    评论

报告相同问题?

悬赏问题

  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名