急求解决 BCB中嵌入汇编的问题!!!!!!!!!!!!!!急急急急急

guoxj0323 2005-05-15 09:50:37
short int csum_cal;
char * output;

1 asm mov dx, 0
2 asm mov cx, c[0]
3 asm shr cx, 1
4 asm mov ah, 0
5 asm push ds
6 asm mov esi, output
7 asm cld
L1:
8 asm lodsw
9 asm add dx, ax
10 asm loop L1
11 asm pop ds

12 asm mov csum_cal, dx
这段程序可以编译通过,但是运行的时候却提示“asm lodsw”这句出错,我知道lodsw 是把si中的所指的地址的一个字传送到AX中,但是却提示错误,这段程序在DOS下面是可以正确运行的。还有在第6行本来为mov si ,output ,不过我知道在window下si为32位,而char* 只有16位,所以改成了esi。哪位可以帮我修改一下,以便在window下运行,真的不胜感激!!!!急急急
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoxj0323 2005-05-16
  • 打赏
  • 举报
回复
这个问题我已经解决了,谢谢大家的帮助!!
MEFULEU 2005-05-16
  • 打赏
  • 举报
回复
是否版本的原因,我这5.0的版本根本没有问题
我不懂电脑 2005-05-16
  • 打赏
  • 举报
回复
估计是机器指令不兼容
guoxj0323 2005-05-16
  • 打赏
  • 举报
回复
int __fastcall TForm1::pp_read_data_block(unsigned short *count, unsigned char *output)
{
int k, i;
unsigned short csum_in, csum_cal;
unsigned short c[2];

k = pp_read_n_bytes(4, (unsigned char *)c);//读并口

if (k == 0)return(CHAR1_TIMEOUT);
if (k != 4)return(GEN_TIMEOUT);
if (c[1] != c[0]) return(COUNT_FAIL);

k = pp_read_n_bytes(c[0],output);
if (k != c[0]) return(GEN_TIMEOUT);

k = pp_read_n_bytes(2, (unsigned char *)&csum_in);

if (k != 2) return(GEN_TIMEOUT);

asm mov dx, 0
asm mov cx, c[0]
asm shr cx, 1
asm mov ah, 0
asm push ds


asm mov esi, output
asm cld

L1:
asm lodsw
asm add dx, ax
asm loop L1
asm pop ds

asm mov csum_cal, dx

if (csum_in != csum_cal) return(CSUM_FAIL);

*count = c[0];

return(OK);
}
发贴提到的汇编代码就包含在这个函数中,编译是能通过的,但是运行的时候就直接指示lodsw错误,多谢大家的帮助!!!!
cczlp 2005-05-16
  • 打赏
  • 举报
回复
是不是需要用EAX代替AX
zhenyu362 2005-05-16
  • 打赏
  • 举报
回复
楼住得说一下怎么解决的吧,太不礼貌了
zhenyu362 2005-05-16
  • 打赏
  • 举报
回复
晕,你上面的代码能编译通过吗,怀疑
你把原本的代码贴出来,然后把编译器报告的错误也贴上来,这样大家才好帮你

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧