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虚拟机实验一下。应该能通过。

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?