关于CWD指令
时间:2011-09-30
来源:互联网
C/C++ code
我写一个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就完全不对了。
我该怎么解决这个问题?
谢谢了。
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就完全不对了。
我该怎么解决这个问题?
谢谢了。
作者: rotApple 发布时间: 2011-09-30
new_itoa(0x0ef61, buff);
作者: jha334201553 发布时间: 2011-09-30
你的什么编译器啊,我的VC6是两个都能正常编译通过的呀,都没有问题
作者: jha334201553 发布时间: 2011-09-30
用的TC。。。。。 郁闷的很。。。。
我用debug调试之后就是我上面写的结果,郁闷的很啊。。。
我用debug调试之后就是我上面写的结果,郁闷的很啊。。。
作者: rotApple 发布时间: 2011-09-30
我调new_itoa(123, buff)的时候
cwd之后ax=123 dx=0
这样的时候才是对的。
但是cwd之后ax=ef61 dx=ffff就不对了。
cwd之后ax=123 dx=0
这样的时候才是对的。
但是cwd之后ax=ef61 dx=ffff就不对了。
作者: rotApple 发布时间: 2011-09-30
哦,原来是这样啊,那是TC的问题啦,纠结的TC没有更新到32位,默认用16位
作者: jha334201553 发布时间: 2011-09-30
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28