這篇文章寫於2023年5月9號。
今天在了「**站」中無意中看到這篇文章。我忘了當時出於什麼原因將其刪除。
重新看了一遍,還記得當年是在乙個自習室裡面敲的。文中的一些往事雖然沒直接寫出來,但看了下內容,還能記得。腦子確實是個好東西。
既然看到,便是緣分,重新放出來吧。
2023年1月28號
後面還有乙個課設二,沒有做。課設二要求編寫乙個自行啟動的計算機,不需要在現有作業系統環境中執行的程式。看著程式要求很長,很麻煩,不想做。(「世之奇偉、瑰怪、非常之觀,常在於險遠,而人之所罕至焉,故非有志者不能至也。」 ——王安石《遊褒禪山記》)
我嘗試在腦子裡,搭起整個組合語言的框架,似乎不太成功。記憶體?暫存器?程式?中斷?總結不了內容,便不要總結了~
(組合語言,也是程式語言。也是順序,選擇分支,迴圈這幾部分邏輯結構。或者說只有順序和選擇。因為迴圈也是選擇分支的一部分。程式的選擇分支,必然要用到轉移指令。轉移指令的根本還是修改cs:ip。不管指令如何執行,必然都離不開暫存器和記憶體的訪問。暫存器的存在,有時候或許是便於對記憶體的管理。還有乙個非常大的板塊是中斷。中斷避免了程式想流水一樣,平平流過,沒有什麼波瀾。彙編的學習離不開硬體。《微機原理與介面》還是非常必要看一下的。)
最後附上書上p285,指令系統的總結,作為結束。
針對8086cpu
1、資料傳送指令
比如mov、push、pop、pushf、popf、xchg等都是資料傳送指令,這些指令實現暫存器和記憶體、暫存器和暫存器之間的單個資料傳送
2、算術運算指令
比如add、sub、adc、sbb、inc、dec、cmp、imul、idiv、aaa等都是算術運算指令,這些指令實現暫存器和記憶體中資料的算術運算。他們的執行結果影響標誌暫存器的sf、zf、of、cf、pf、af位
3、邏輯指令
比如and、or、not、xor、test、shl、shr、sal、sar、rol、ror、rcl、rcr等都是邏輯指令。除了not指令外,他們的執行結果影響標誌暫存器的相關標誌位
4、轉移指令
可以修改ip,或同時修改ip和cs的指令統稱為轉移指令。分類如下:
4.1:無條件轉移指令,比如jmp
4.2:條件轉移指令:jcxz、je、jb、ja、jna、jnb等
4.3:迴圈指令,比如loop
4.4:過程,比如call、ret、retf
4.5:中斷,比如int、iret
5、處理控制指令
這些指令對標誌暫存器或其他暫存器狀態進行設定,比如cld、std、cli、sti、nop、clc、cmc、stc、hlt、wait、esc、lock等都是處理器控制指令
6、串處理指令
這些指令對記憶體中的批量資料進行處理,比如movsb、movsw、cmps、scas、lods、stos等。若要使用這些指令方便進行批量資料的處理,則需要rep、repe、repne等字首指令配合使用。
類似系列《組合語言》的部落格參考:
組合語言跳轉總結
跳轉指令分三類 一 無條件跳 jmp 無條件跳轉 二 根據cx ecx暫存器的值跳 jcxz cx 為 0 則跳轉 jecxz ecx 為 0 則跳轉 三 根據eflags暫存器的psw標誌位跳轉,這個太多了.根據標誌位跳轉的指令 je 等於則跳轉 同jz jne 不等於則跳轉 同jnz ja 無符...
組合語言 章節總結
第一章 彙編指令和機器指令一一對應,有編譯器翻譯識別,計算機無法直接識別 乙個儲存單元等於1位元組 1位元組等於8位 1kb 1024byte 位元組 1byte 8bit 位 cpu中,指令和資料都是二進位制形式存在 磁碟的資料,cpu無法直接使用,只能讀到記憶體中,才能被cpu使用 cpu可以使...
組合語言 AT T組合語言
這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...