滴水公開課

雨里青山隐發表於2024-05-30

邏輯運算

1.或運算:兩位數只要有一位是1——真(1)
彙編:or c語音:‖
2.與運算:兩位數都為1——真(1)
彙編:and c語音:&
3.異或運算:兩位數不相同——真(1)
4.彙編:xor c語音:^

5.非運算:0為1,1為0

彙編:not c語音:!

計算機的計算2+3運算(cpu)

組合語言的2➕3的計算

兩個16進位制數代表一個位元組

一個位儲存一個1和0

暫存器與記憶體

CPU裡的儲存容器為暫存器,

記憶體條裡的儲存容器為記憶體

1.暫存器

32位指的是32個位元組

ADD是加法,SUB為減法。

MOV EAX, 12345678 //1234678為立即數

ADD EAX,1 //EAX加上1,並放到EAX裡(EAX+1=EAX)

MOV ECX,2

ADD EAX,ECX

SUB EAX,3 //EAX-3=EAX

2.記憶體

1.32位指記憶體裡的定址條最大定址範圍(即0xfffffffff)

也是指4g,但也可以超過4g.

2.每個記憶體單元的寬度為8

1kb=1024位元組

使用

定址公式:

1.立即數

讀取記憶體的值

MOV EAX,DWORD PTR DS:[0X13FFC4] //dword--32位

MOV EAX,DWORD PTR DS:[0X13FFC8]

向記憶體寫入資料

MOV DWORD PTR DS:[0X13FFC4],0x87654321

MOV DWORD PTR DS:[0X13FFC8],ebx

獲取記憶體編碼

LEA ECX,DWORD PTR DS:[0X13FFC4]

LEA EAX,DWORD PTR DS:[ESP+8]

2.用暫存器表示地址

讀取記憶體值

MOV ECX,0X13FFC4 //把地址放進ECX裡

MOV EAX,DWORD PTR DS:[ECX]

3.暫存器+立即數

讀取記憶體值

MOV ECX,0X13FFC4

MOV EAX,DWORD PTR DS:[ECX+4] //取得是0x13FFC8

4.[reg+reg*i] //reg指暫存器,i為1,2,4,8

MOV EAX,0X13FFC4

MOV ECX,2

MOV EDX,DWORD PTR DS:[EAX+ECX*4] //0X13FFC4+(2*4)

5.[reg+reg*i+立即數] //i為1,2,4,8

MOV EAX,0X13FFC4

MOV ECX,2

MOV EDX,DWORD PTR DS:[EAX+ECX*4+4] //0X13FFC4+(2*4)+4

堆疊

1.本質為記憶體

2.棧 是用來儲存臨時變數,函式傳遞的中間結果

棧頂(esp),棧底(ebp)

入棧(push),出棧(pop)——地址都是改變esp

3.

待續。。。。。

相關文章