Win32彙編學習筆記(一)

2021-08-22 02:04:13 字數 1133 閱讀 3592

一、基礎

資訊以位元組為單位儲存,即byte。

1個byte有8個bit,從高到低是7 6 5 4 3 2 1 0。

第7最高,叫msb,most significant bit。

第0最低,叫lsb,least xx。

32位cpu一次操作可以處理32bit個二進位制位。因此需要比位元組更大的單位。

比如:字(16bit)、雙字(32bit)

如果超過了1個byte,就有個儲存順序的問題。

inter存乙個字,比如0x60 25,存的時候是0x25 0x60的順序,這是little endian的方式。

inter不要求字的位址是偶數,如果是偶數,則是乙個對準字,如果不是,則稱為未對準字。

對應的有big endian方式。在程式設計前這是首先應該搞清楚的問題。

資料表示

有符號整數用補碼。如果用乙個字表示乙個數,當然有範圍問題。

無符號數0~65535

有符號:-32768 ~32767

存正整數正常存,存負整數時儲存的是數的絕對值取反加1。比如,儲存-466,

0000 0001 1101 0010 =446

1111 1110 0010 1101 取反

1 加1

----------

1111 1110 0010 1110 實際儲存的數,按照little endian儲存,則0010 1110在前,1111 1110在後。

字元表示需要有乙個對映表,ascii最常用。用7個bit來表示字元。

漢字表示,中國是gb2312-80標準。用兩個byte表示乙個漢字。標準映**了6763個漢字,分成94個區,每區94個位,編號從0xa0開始,不占有ascii 0x00~0x7f。每個漢字有唯一的區碼和位碼。

unicode是另一種字元對映,它將全世界的字元都包括進來,也使用2個byte。

bcd碼,目的是將資料的輸入和輸出變得簡單。存466時,如果用乙個字,則

466 =0001 1101 0010 =0x01 d2

如果用bcd,則之間看成0x04 0x66分別進行儲存就行了,這是壓縮bcd碼。

如果不壓縮,則看成0x04 0x06 0x06分別儲存。

inter系列cpu支援bcd形式數字處理的指令。

開始學習win32彙編

前段時間對於csdn的部落格系統徹底失望,在我現在寫的東西都還不知道能不能正常發出去,鬱悶,加上過年有這麼久沒有來了。這段時間開始學習彙編,說到彙編,大學開過兩門相關課程,微機原理和微控制器都是學這方面的,不過那都是8086,51級別的彙編,感覺根本跟不上時代,那時候學的還不錯 現在想學習學習win...

Win32彙編基礎

常用指令 mov 目標運算元,源運算元 mov eax,0x0 進行資料傳遞 movzx mov zero x 以0填充高位,用法同上,push poppushad 所有暫存器壓棧 8個 popad 所有暫存器出棧 8個 lea 取位址指令,類似c語言中的 call 呼叫函式指令 add 加 sub...

Win32彙編 實數

386 選擇的處理器 model flat,stdcall option casemap none 指明識別符號大小寫敏感 include kernel32.inc 要引用的標頭檔案 includelib kernel32.lib 要引用的庫檔案 includelib msvcrt.lib 引用c庫...