关于NEG指令的不解之处

isunx 2011-11-16 11:51:53
请教各位高师,本段程序中的NEG指令起到什么作用,谢谢!


;*************************************************
;功 能: 搜索PE文件里全零的区域
;返回值: EAX - 起始地址
;     EDX - 全零区域的大小
;************************************************* 
GetZero proc zStart,zSize,rSize
pushfd
push esi
push edi
cld
mov eax,zStart
.if word ptr [eax] == 5A4Dh
add eax,[eax+3ch]
.if dword ptr [eax] == 00004550h
mov edx,0F8h
add edx,eax
sub edx,zStart
sub zSize,edx
add zStart,edx
.endif
.endif
mov edi,zStart
mov ecx,zSize
shr ecx,2
xor eax,eax
lp0:repnz scasd
lea esi,[edi-4]
mov edx,esi
repz scasd
sub edx,edi
neg edx ;*** ?
sub edx,4 ;*** ?
jecxz lp1
cmp edx,rSize
jb lp0
lp1: .if edx >= rSize
lea eax,[esi+4]
sub edx,4
.endif
pop edi
pop esi
popfd
ret
GetZero endp
...全文
661 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingghost 2011-11-18
  • 打赏
  • 举报
回复
取补指令 NEG(NEGate)

格式: NEG OPRD
----

功能: 对操作数OPRD进行取补操作,然后将结果送回OPRD.取补操作也叫作求补操作,就是
---- 求一个数的相反数的补码.

说明: 1. OPRD为任意通用寄存器或存储器操作数.
----
2. 示例: (AL)=44H,取补后,(AL)=0BCH(-44H).

3. 本指令影响标志位CF、OF、SF、PF、ZF及AF.
mustmust 2011-11-17
  • 打赏
  • 举报
回复
格式:NEG DEST   ;dest ← 0-dest
作用:取操作数的负数,对于带符号数来说,就是取其补码,所以也叫做取补指令。
NEG指令执行后,如果源操作数非0,则OF置1,否则为0.
大熊猫侯佩 2011-11-16
  • 打赏
  • 举报
回复
实践,最好的理解
isunx 2011-11-16
  • 打赏
  • 举报
回复
谢谢Zara,我用IDA5反汇编了一下,看到了等效指令,谢谢!
zara 2011-11-16
  • 打赏
  • 举报
回复
这个问题,调试软件里,在这儿单步运行,看 edx 的内容和它的变化,就会发现其作用了。其实也就是个根据位移计算长度的计算方法的问题。

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧