论坛风格切换切换到宽版
  • 4656阅读
  • 7回复

[灌水] Table[(addr)>>29]|((addr)&0x0FFFFFFF 的X86汇编? [复制链接]

上一主题 下一主题
离线littlewater
 
发帖
793
樱饼
5
博丽神社的喝茶券(威望)
1
春度
59
交易币
0
只看楼主 倒序阅读 楼主  发表于: 2010-01-23
很久没在这里发帖灌水

已知 UINT32 Table[];

如何对Table[(addr)>>29]|((addr)&0x0FFFFFFF手动X86汇编?

自己的写法(这样写,然后用的是nasm汇编器,在VC下面跑出来的反汇编指令恰好一样(才知道可能会不一样|||)):

  1. mov ecx, eax
  2. and eax, 0x0FFFFFFF            ; addr & 0xFFFFFFF
  3. shr ecx, 29                               ; addr >> 29
  4. or  eax, [_Table + ecx * 4]     ; _Table[addr >> 29] | (addr & 0xFFFFFFF)


但是水水知道汇编代码需要考虑每个指令(字节)长度、还有指令顺序之类的……
想一并请教一下~
[ 此帖被littlewater在2010-01-23 19:18重新编辑 ]
水水
离线sjmind
发帖
145
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 1楼 发表于: 2010-01-23
没看懂问题
nasm本身距离标准的X86就远的去了,很多问题可以不用考虑的
话说,"字节长度、指令顺序"你想说的是什么问题?
eax系列都是以字为单位的,但是字节长度是什么意思?标准x86貌似都是8bits
指令顺序是指为了减少流水线损耗调整指令顺序?nasm的话可以不考虑这个,nasm默认就是两遍优化,包含了处理器优化的(貌似)但实际上,在CISC里面考虑这个问题没大意义
离线littlewater
发帖
793
樱饼
5
博丽神社的喝茶券(威望)
1
春度
59
交易币
0
只看该作者 2楼 发表于: 2010-01-23
=x= 我外行人嘛^^

原来它内部也会重新修改代码? 可是好像编出来的和我写的也没差别呀^^
[ 此帖被littlewater在2010-01-23 19:18重新编辑 ]
水水
离线sjmind
发帖
145
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 3楼 发表于: 2010-01-23
まっ
nasm本身就是比较高级的汇编,这种东西考虑得少点反而会比较好。
(其实如果不强求自己写汇编的话,可以用高级语言的优化,只要不涉及类相关的代码,优化的结果绝大部分都是最优解了)
当然如果是给RISC编程、或者用gas汇编的话,再开始考虑这种问题会比较好。
离线ryuka
发帖
234
樱饼
0
博丽神社的喝茶券(威望)
0
春度
37
交易币
0
只看该作者 4楼 发表于: 2010-01-24
很奇怪水水姐这个代码是来做啥的=v= 哪个问题需要这样的code,貌似用addr做个伪handle还是啥..
。。。没啥签名。。。反正是一小号。。。
离线littlewater
发帖
793
樱饼
5
博丽神社的喝茶券(威望)
1
春度
59
交易币
0
只看该作者 5楼 发表于: 2010-01-30
有些东西,去研究它并没有太多意义了……譬如猜测出处=_,=+

好像这个的确没有啥可以改进的吧?
水水
离线sjmind
发帖
145
樱饼
0
博丽神社的喝茶券(威望)
0
春度
8
交易币
0
只看该作者 6楼 发表于: 2010-01-30
回 5楼(littlewater) 的帖子
这么短的代码,总共也没几个解
应该是最优解没错了(除非后续代码可能会使得这个局部最优解不能导致全局最优解)
离线littlewater
发帖
793
樱饼
5
博丽神社的喝茶券(威望)
1
春度
59
交易币
0
只看该作者 7楼 发表于: 2010-01-30
那下次再来问好了嗯^^
水水
快速回复
限100 字节
 
上一个 下一个