关于CWD指令

rotApple 2011-09-30 03:52:23

char *new_itoa(int val, char *buff)
{
int l;
int i = 0;
int j = val;
do
{
buff[i] = ((j % 10) + 0x30); /*ascii to digit*/
j /= 10;
i++;
}
while(j != 0);
buff[i] = 0; /*ends with 0*/
for(l=0,j=i-1;l<j;l++,j--) /*reverse*/
{
buff[j] ^= buff[l];
buff[l] ^= buff[j];
buff[j] ^= buff[l];
}
return buff;
}


我写一个INT转CHR
new_itoa(123, buff); 这样的时候, 是正常的。没有什么问题
但是我调new_itoa(0xef61, buff);这样的时候,转换就有问题了。
我debug了一下,发现:
mov ax,si si=0xef61
mov bx,0ah (j % 10)
cwd ax=ef61 dx=ffff
idiv bx ax=fe57 dx=fffb
add dl,30h ((j % 10) + 0x30) dx=ff2b
mov bx,[bp-2]
mov [bx+di],dl buff[i] = 2b!!!

把我传的数当补码了,cwd后dx成了ffff,到最后面的存储进buff的时候取的DL就完全不对了。
我该怎么解决这个问题?
谢谢了。
...全文
1482 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rotApple 2011-09-30
  • 打赏
  • 举报
回复
算了我也不纠结了。 结帖了。
「已注销」 2011-09-30
  • 打赏
  • 举报
回复
哦,原来是这样啊,那是TC的问题啦,纠结的TC没有更新到32位,默认用16位
rotApple 2011-09-30
  • 打赏
  • 举报
回复
我调new_itoa(123, buff)的时候

cwd之后ax=123 dx=0
这样的时候才是对的。

但是cwd之后ax=ef61 dx=ffff就不对了。
rotApple 2011-09-30
  • 打赏
  • 举报
回复
用的TC。。。。。 郁闷的很。。。。

我用debug调试之后就是我上面写的结果,郁闷的很啊。。。
「已注销」 2011-09-30
  • 打赏
  • 举报
回复
你的什么编译器啊,我的VC6是两个都能正常编译通过的呀,都没有问题
「已注销」 2011-09-30
  • 打赏
  • 举报
回复
new_itoa(0x0ef61, buff);

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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