这几天开始做汇编方面的支持, 进展比较缓慢, 主要有以下问题:
- MinGW 上编译比较缓慢, 导致 configure 非常慢, 难以忍受.
- 莫名奇妙的问题比较多, 感觉上跟 Windows 关系比较大, configure.in 文件必须得 UNIX 格式, 如果是 DOS 格式就会出错. 现在 X86 上的汇编单独测试的结果是没有问题的, 但是运行在 MAC 中就会出现 CRC 校验错误, 打出的 log 中间前面一部分是对的, 中间有个值错了一点点, 不知道到底是哪里出错了.
- 对汇编不熟, 写起来比较费劲. X86 的还好, 直接把原来的拷贝过来, 稍微改改就可以了. X86_64 就差一些了, 得看很多文档.
继续努力, 现在在考虑是先把 Win32 上搞好呢, 还是先把 ADM64 弄好.




Win32 上的完成了
写完以后再仔细看了一下, 在 Win32 上的汇编中自己犯了一个愚蠢的错误, 原来的代码中有一个跳转是
jle, 需要改成jge, 而我写成了jg, 这样当等于 0 的时候就错了, 从而导致微小的错误, 但足以让 CRC 验证通不过. 说明单元测试狠重要, 最好覆盖所有的用例, 象这里我等于零的情况自己就没测试到.而 AMD64 上则是非常诡异, 如下的汇编代码:
调用如下:
理论上应该是: 如果第一个参数小于零, 则结果为 1, 如果等于零,, 结果为 0, 如果大于零, 结果为 -1. 运行的结果是不管大于零小于零都是 -1. 很奇怪.
GDB 的调试结果
看到这个结果, 就更诧异了, 第一个 si 以后, eflags 变成了 0x302, 也就是说 OF(第 11 位)为 0, SF (第 7 位) 也为 0, 而 JGE 发生的条件是
SF == OF. 这就奇怪了, SF 位应该是 1 的呀(-8 - 0 = -8, 结果是负数, SF 应置 1).AMD64 汇编问题解决
昨天在 comp.lang.asm.x86 上发了求助贴, 今天有人回了:
回头想想, 一方面读手册不仔细, 另外一方面其实从 GDB 的结果是可以看出来的, rdi 是 64 位寄存器, 显示出来的结果应该是
0xfffffffffffffff8(-8), 而实际上显示出来的是0xfffffff8(4294967288), 在这一点上大大疏忽了. 多读文档, 多仔细读文档.嗨!说句题外话
SuperMMX老兄,
如果有时间,
请看看mac插件源码的下载链接,
无法下载的。
谢谢!
不好意思
找到下载点了;
现在xmms2已经出了0.2,
要是老兄能写个xmms2的mac插件就好了
下载与 xmms2
下载以后本站不再提供, 都扔到 Sourceforge.
xmms2 其实我去年已经做了, 已经提交到 [XMMS2 bug tracker], 分别是 [#363] 和 [#210]. 但由于当时的 XMMS2 架构不好, 同步有些 bug, 此插件还不能完全正确工作.
后来机器坏掉就再没做了, 现在也没有自己的 Linux 桌面, 所以只好搁浅.
Post new comment