开篇点题,一个字评价intel sdm:屎。内容对不对暂且不说,我反正看的是头大。这也是我要写这篇文章的原因之一。
说起汇编,我当初要学习他有以下原因:(1)代码美观、整洁;(2)直接操控底层;(3)运行速度快,但现在看来是一个也沾不上边。首先,x86指令集属于cisc,这就注定了指令数目的庞大,书里按类归代码都能列举十几页,可见其恐怖。说到底,如果你一开始就抱着“能跑就行”的心态学这个玩意,那还是趁早算了吧,你只需要了解一些系统指令和运算就行了,什么浮点运算,sse,avx都别想了。例如,x86有一个指令:cmpxchg,我实在想不明白是干啥的。这指令完全等价于这几行:
%macro cmpxchg 2
cmp eax,%1
pushf
jz @1
mov eax,%1
jmp @2
@1:
mov %1,%2
@2:
popf
%endmacro
可能区别在于不调用栈?有懂的人告我一声。说回来,操控底层更别提了。当你学到一定阶段的时候,一堆问题就抛给你了:这内存怎么是这么排的?为什么我不能直接写内存?我为什么不能直接写cpu内部的东西?如今你终于知道了,intel不让你干的东西你就不能干,别想着整点花活。至于运行速度快与否,纯看你个人实力,你要是不能比c或者各种编译器写的还快那就是白搭,就算省了那几个周期的时间也没啥卵用。所以到这,不想学