当前位置: 代码迷 >> 汇编语言 >> 对于esi的1点困惑
  详细解决方案

对于esi的1点困惑

热度:1026   发布时间:2016-05-02 05:07:12.0
对于esi的一点困惑
1)请问如果我想历遍一个数组(array), 
应该用mov esi,0
  还是mov esi,offset array1 (这个是数组开始的位置吗?)

这两个有什么区别?


2)还有movzx 和mov  之间有什么区别?




------解决思路----------------------
1.mov eax,array[esi*(数组元素的大小)],然后增加esi,循环.有很多寻址方式的。自己看关于寻址方式的资料
2.MOVZX是零扩展传送,将源操作数的内容复制到目的操作数,并将值以0填充至16位或32位。
------解决思路----------------------
mov esi,0的话 就是 array[esi] 然后esi++
其实编译了后就会变成 [ array + esi ]

mov esi,offset array 的话直接使用esi++
编译后 [ esi ],直接访问

movzx 会填充不够的长度 ,movzx eax,dl 这样的话eax 就会等于dl
------解决思路----------------------
mov esi,0
相当于把 esi 作为变址

mov esi,offset array1
相当于把 esi 作为基址
  相关解决方案