首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >watcom内联程序集出现“非法使用寄存器”错误

watcom内联程序集出现“非法使用寄存器”错误
EN

Stack Overflow用户
提问于 2013-11-11 02:50:09
回答 1查看 484关注 0票数 1

我使用Open V1.9,目标环境是DOS-16位,图像类型是exe。目标cpu是80386。

这是我的源代码:

代码语言:javascript
复制
#include <stdio.h>

void getITV(int n);
unsigned int ITV[16];

void main()
{
    int i=0;
    for(i=0;i<16;i++){
        getITV(i);
        printf("%x   ",ITV[i]);
    }
    printf("\n");
}

void getITV(int n)
{
    int*  address ;
    n = n * 2;
    address     = (int*) ( (int)ITV + n );
    __asm{
        push es
        push ax
        push bx
        mov ax,0
        mov es,ax
        mov ax,n
        mov bx,es:[ax]            --<this line is the one create error>--
        mov word ptr [address],bx
        pop bx
        pop ax
        pop es
    }
}

当我成功的时候,我得到了这个:

代码语言:javascript
复制
cd D:\watcom-project\dumpIVT
wmake -f D:\watcom-project\dumpIVT\dumpIVT.mk -h -e -a D:\watcom-project\dumpIVT\getCS.obj
wcc getCS.c -i="C:\WATCOM/h" -w4 -e25 -zq -od -d2 -3 -bt=dos -fo=.obj -mm
getCS.c(28): Error! E1156: Assembler error: 'Illegal use of register'
Error(E42): Last command making (D:\watcom-project\dumpIVT\getCS.obj) returned a bad status
Error(E02): Make execution terminated
Execution complete

好吧,但是我看不出Line28是怎么错的,我检查了打开的watcom用户指南,但是在“在线汇编语言”一节中,没有关于我为什么会出现这个错误的信息。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-11 16:29:40

您不能在16位模式下使用80x86处理器的ax寄存器来访问内存位置,或者至少不能以这种方式访问。尝试使用索引寄存器之一,例如si或di。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19898081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档