注册 登录
编程论坛 汇编论坛

一个被人忽视的条件语句: 逻辑取反 "!"

tigerdown 发布于 2020-10-06 15:55, 8702 次点击
刚开始,我把它误作为"不等于 != "条件语句,随后我查了二本书,它们是这样叙述的:
中文书:!逻辑取反 ---- 对变量取反或对表达式的结果取反
英文书: ! express ---- Returns true when express is false

显然前者解释得更具体,更精准。下面我举个例子来看一下,这条件语句是怎样被巧妙运用的,这对程序员是非常有用的。
这是程序中的一段,它是用来阅读文件的:

;循环读出文件并处理每个字节
;********************************************************************
..............
        xor    eax,eax
        mov    @dwBytesRead,eax
        .while    TRUE
            lea    esi,@szReadBuffer
            invoke    ReadFile,@hFile,esi,sizeof @szReadBuffer,addr @dwBytesRead,0
            .break    .if ! @dwBytesRead  ;!- 逻辑取反 0>>1,1>>0
            invoke    _FormatText,esi,@dwBytesRead,@hFileNew
        .endw
.................

用while语句来循环阅读文件,当阅读完文件后,@dwBytesRead为0, 取反后为1, 跳出循环,另外,当@dwBytesRead
不为0时,设置为0, 这是reafIle()的前置要求,所以只有用这语句才能更好地实现。如果谁能更详细更准确地解读这语句,请让我们分享一下。
5 回复
#2
Valenciax2020-10-07 19:43
楼主用心,这个分享不错.
嗯,代码其实也有风格,有些人喜好精简,有些人醉心技巧.
没有注解,看别人的代码有时会get不到其用意.
比如这个,也不一定非这样写不可,把变量初始化放在回圈最前,简单比较传回值0则离开,对初学者可能更好理解.

#3
tigerdown2020-10-08 06:09
回复 2楼 Valenciax
确实如此,另外面对繁多的汇编指令,运用起来总觉得有点力不从心,你是否能推荐一本类似指令大全的书,能让程序员快速查询,谢谢了。
#4
Valenciax2020-10-08 14:10
书倒不大看,基本指不外那几十条,不用刻意记,多用了就记得.
下面是x86的全部指令集,速看一遍,知道一个大概就可以了,碰到须用到的再去查一下用法.
https://www.

至于win32那些高阶的伪指令就更少,用到的找一就是.
https://docs.
#5
sssooosss2021-09-28 08:58
共同学习
#6
自由而无用2021-09-28 09:29
https://docs.(v=msdn.10)

// Attempt a synchronous read operation.
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
// Check for end of file.
if (bResult &&  (nBytesRead == 0) )
{
   // you are at the end of the file.
}

[此贴子已经被作者于2021-9-28 09:31编辑过]

1