This topic has been archived. It cannot be replied.
-
工作学习 / IT技术讨论 / 请懂8088汇编及C的dx指点一下 。多谢
-farmer(农夫®);
2003-7-10
{597}
(#1278740@0)
-
比较急,请懂行的朋友支一下招吧。在C与汇编混合编程中,怎样才能将在C中定义的double变量存到固定的memory里呢?
-farmer(农夫®);
2003-7-10
(#1278778@0)
-
just my 2-cent
-lusi(丑小鸭);
2003-7-10
{650}
(#1278795@0)
-
问题是:我怎样才能将在C中定义的double 变量的地址传到汇编中去。如果是int 变量好办: lea si, 变量名 ; 就行了。但double变量不行?
-farmer(农夫®);
2003-7-10
(#1278854@0)
-
如果是这样的话, 试试直接把变量地址传给一个变量, 然后在汇编里用MOV SI, ADDRESS
-firefox(火狐之草莓樱桃小苍兰);
2003-7-10
(#1278858@0)
-
问题解决了。首先设一个指针指向这个变量,然后将指针mov到si里,方便以后的间接寻址。重要的是在我的16位系统里double变量是64位的(8byte)。多谢两位。多谢
-farmer(农夫®);
2003-7-10
(#1279005@0)
-
问题解决了,采用了你的方法。关键在我的16位系统里,double 是64位的,我以为是32位
-farmer(农夫®);
2003-7-10
(#1279020@0)
-
一下为一个从地址为 0x7FF0 的 mem 中取出一个64位的double类型的数。请你看看
--------------------------------------------------------------------------------
-farmer(农夫®);
2003-7-11
{672}
(#1280924@0)
-
多年不用了. 把编译出错信息给出来看看.把你的变量地址打出来看看. 按丑小鸭给出的结构存取. 我的猜想:你的变量地址是32位, 而SI 是16位.
-firefox(火狐之草莓樱桃小苍兰);
2003-7-10
{32}
(#1278849@0)
-
一下为一个从地址为 0x7FF0 的 mem 中取出一个64位的double类型的数。请你看看
-farmer(农夫®);
2003-7-11
{676}
(#1280918@0)
-
请进:原因不明, 但你的C语言里的指针没有初始化啊. 另外, 数据范围有没有超?试个小一点的?
-firefox(火狐之草莓樱桃小苍兰);
2003-7-11
{79}
(#1280941@0)
-
初始化以后,结果不变。问题是在两个不同的程序中, unsigned int address = 0x07FF0
我用
mov ax,ds:0x07FF0
..
mov ax, ds:[address+2]
就可以(结果正确)。而
mov ax,ds:[address]
..
mov ax, ds:[address+2]
就不行!
-farmer(农夫®);
2003-7-11
{189}
(#1280988@0)
-
得, 麻爪了, 我的猜想:从你错误的结果看, 好象是浮点数超过表示范围以后,为了保持精度而进行的四舍五入. 我觉得其中的原因可能在于编译器, 你记得你上一个问题, 就是给它立即数就可以, 如果用LEA SI, 就不行. 编译器记住了或给了某些变量的类型, 并带到了汇编里.
实在不知道原因, 只好瞎猜猜了. :P
另外你用小一点的数据试了吗?结果如何?
-firefox(火狐之草莓樱桃小苍兰);
2003-7-11
{295}
(#1281036@0)