資源描述:
《匯編語言超濃縮教程》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、匯編語言超濃縮教程匯編語言超濃縮教程匯編語言超濃縮教程(轉(zhuǎn))“哎喲,哥們兒,還搗鼓匯編呢?那東西沒用,兄弟用VB"釣"一個API就夠你忙活個十天半月的,還不一定搞出來。”此君之言倒也不虛,那吾等還有無必要研他一究呢?(廢話,當然有啦!要不然你寫這篇文章干嘛。)別急,別急,讓我把這個中原委慢慢道來:一、所有電腦語言寫出的程序運行時在內(nèi)存中都以機器碼方式存儲,機器碼可以被比較準確的翻譯成匯編語言,這是因為匯編語言兼容性最好,故幾乎所有跟蹤、調(diào)試工具(包括WIN95/98下)都是以匯編示人的,如果閣下對CRACK頗感興趣……;二、匯編直接與硬件打交道,如果你想搞通程序
2、在執(zhí)行時在電腦中的來龍去脈,也就是搞清電腦每個組成部分究竟在干什么、究竟怎么干?一個真正的硬件發(fā)燒友,不懂這些可不行。三、如今玩DOS的多是“高手”,如能像吾一樣混入(我不是高手)“高手”內(nèi)部,不僅可以從“高手”朋友那兒套些黑客級“機密”,還可以自詡“高手”盡情享受強烈的虛榮感--#$%&“醒醒!” 對初學者而言,匯編的許多命令太復雜,往往學習很長時間也寫不出一個漂漂亮亮的程序,以致妨礙了我們學習匯編的興趣,不少人就此放棄。所以我個人看法學匯編,不一定要寫程序,寫程序確實不是匯編的強項,大家不妨玩玩DEBUG,有時CRACK出一個小軟件比完成一個程序更有成就感
3、(就像學電腦先玩游戲一樣)。某些高深的指令事實上只對有經(jīng)驗的匯編程序員有用,對我們而言,太過高深了。為了使學習匯編語言有個好的開始,你必須要先排除那些華麗復雜的命令,將注意力集中在最重要的幾個指令上(CMPLOOPMOVJNZ……)。但是想在啰里吧嗦的教科書中完成上述目標,談何容易,所以本人整理了這篇超濃縮(用WINZIP、WINRAR…依次壓迫,嘿嘿?。┙坛?。大言不慚的說,看通本文,你完全可以“不經(jīng)意”間在前輩或是后生賣弄一下DEBUG,很有成就感的,試試看!那么――這個接下來呢?――Herewego?。ㄩ喿x時看不懂不要緊,下文必有分解) 因為匯編是通過CP
4、U和內(nèi)存跟硬件對話的,所以我們不得不先了解一下CPU和內(nèi)存:(關于數(shù)的進制問題在此不提) ?。茫校帐强梢詧?zhí)行電腦所有算術╱邏輯運算與基本I/O控制功能的一塊芯片。一種匯編語言只能用于特定的CPU。也就是說,不同的CPU其匯編語言的指令語法亦不相同。個人電腦由1981年推出至今,其CPU發(fā)展過程為:8086→80286→80386→80486→PENTIUM→……,還有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不過多了些指令(如多能奔騰的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。為確保匯編程序可以適用于各種
5、機型,所以推薦使用8086匯編語言,其兼容性最佳。本文所提均為8086匯編語言。寄存器(Register)是CPU內(nèi)部的元件,所以在寄存器之間的數(shù)據(jù)傳送非??臁S猛荆?.可將寄存器內(nèi)的數(shù)據(jù)執(zhí)行算術及邏輯運算。2.存于寄存器內(nèi)的地址可用來指向內(nèi)存的某個位置,即尋址。3.可以用來讀寫數(shù)據(jù)到電腦的周邊設備。8086有8個8位數(shù)據(jù)寄存器,這些8位寄存器可分別組成16位寄存器:AH&AL=AX:累加寄存器,常用于運算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:計數(shù)寄存器,常用于計數(shù);DH&DL=DX:數(shù)據(jù)寄存器,常用于數(shù)據(jù)傳遞。為了運用所有的內(nèi)存空間
6、,8086設定了四個段寄存器,專門用來保存段地址:CS(CodeSegment):代碼段寄存器;DS(DataSegment):數(shù)據(jù)段寄存器;SS(StackSegment):堆棧段寄存器;ES(ExtraSegment):附加段寄存器。當一個程序要執(zhí)行時,就要決定程序代碼、數(shù)據(jù)和堆棧各要用到內(nèi)存的哪些位置,通過設定段寄存器CS,DS,SS來指向這些起始位置。通常是將DS固定,而根據(jù)需要修改CS。所以,程序可以在可尋址空間小于64K的情況下被寫成任意大小。所以,程序和其數(shù)據(jù)組合起來的大小,限制在DS所指的64K內(nèi),這就是COM文件不得大于64K的原因。8086以
7、內(nèi)存做為戰(zhàn)場,用寄存器做為軍事基地,以加速工作。除了前面所提的寄存器外,還有一些特殊功能的寄存器:IP(IntructionPointer):指令指針寄存器,與CS配合使用,可跟蹤程序的執(zhí)行過程;SP(StackPointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置。BP(BasePointer):基址指針寄存器,可用作SS的一個相對基址位置;SI(SourceIndex):源變址寄存器可用來存放相對于DS段之源變址指針;DI(DestinationIndex):目的變址寄存器,可用來存放相對于ES段之目的變址指針。還有一個標志寄存器FR(FlagRe
8、gister),有九個有