能力值:
( LV3,RANK:20 )
|
-
-
2 楼
偶地址用word操作(lodsw)速度比使用lodsb一次装入比较一字节快,这段代码是先判断如果开始地址为奇,是则先取第1字节来判断,之后每次取两字节来判断,这样做是基于速度优化。
其实,这也不是最优代码,还可以考虑lodsd。
|
能力值:
( LV6,RANK:80 )
|
-
-
3 楼
如果地址是奇数的话?不能用lodsw?
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
可以,但处理后一个字节会消耗更多时间。
|
能力值:
( LV6,RANK:80 )
|
-
-
5 楼
这样,它是按照速度这方面考虑了?呵呵~~~谢谢..
实现方面没问题,即使不加那个判断也行了?...
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
不加那个判断当然也行,但对于常用函数速度优化至关重要。
再说的详细一点,这里涉及到CPU访问内存的硬件知识,汇编书籍很少讲,奇地址下使用lodsw存在2次访问内存的情况,如:
以64位数据总线奔腾为例子,8个字节宽度的内存连在总线上,
CPU总是一次从偶地址0、8。。。,读写并排的8个字节:
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
.......
当16位字的地址为 0~6 时没问题,但地址为 7 时就包含了7,8两个字节,这需要2次内存操作才能完成。
对于不同的CPU配不同的内存,这个问题的严重程度是不一样的,对CPU配双通道DDR(128位)这个问题小一点,但对16、32位CPU这个问题更严重。特别是16位CPU,所有奇地址lodsw都是2次内存访问!
|
|
|