gpt4 book ai didi

c - watcom 内联汇编出现错误 "Illegal use of register"

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:04 24 4
gpt4 key购买 nike

我使用的是Open Watcom IDE V1.9,目标环境是DOS-16bit,镜像类型是exe。 objective-c pu 是 80386。

这是我的源代码:

#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
}
}

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

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 是怎么错的,我查看了 open watcom 用户指南,但在“内联汇编语言”部分,没有关于为什么的信息我收到了这个错误。有什么建议吗?

最佳答案

您不能在 16 位模式下使用 80x86 处理器的 ax 寄存器来访问内存位置,或者至少不能以这种方式访问​​。尝试使用其中一个变址寄存器,例如 si 或 di,为此

关于c - watcom 内联汇编出现错误 "Illegal use of register",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com