組合語言學習

2022-09-18 06:03:29 字數 2273 閱讀 4199

(持續更新)

彙編指令

1.mov指令

mov是乙個傳送指令,可以實現以下操作:

有一點需要注意,資料不能直接傳給段暫存器,比如mov ds,100h就是錯誤的。但是可以將其他暫存器中的值賦給段暫存器。段暫存器有cs,ds,ss,es等。如果你想知道為什麼,那就可以去了解一下關於每條指令的硬體實現。後面還有好多指令有一系列的限制,其限制都是與硬體實現有關的。

補充一點需要注意的,當執行與記憶體單元相關的資料傳送時,中括號中的暫存器只能是四選一,這四個暫存器包括:bx,bp,si,di。四個暫存器在進行間接定址時不能拆成8位的用(bp,si,di本來也只能支援16位,本身不能拆開)。舉個例子mov ax,[bx+100]是正確的,mov ax,[bl+1]是錯誤的。

此外,有的軟體不支援中括號中是數字,並且把括號中的數字當做內容來使用。針對這種情況,比較保險的方法是在中括號前面加上段字首,比如mov ds:[0]。

2.add指令

add指令用於實現兩個數的加法,比如

add ax,bx
該指令會將bx中的值加到ax上,並且結果會儲存在ax中。需要注意的是,該指令不支援對段暫存器進行操作,無論段暫存器是作為第乙個運算元還是第二個運算元。

3.sub指令

sub是乙個減法指令,與add可以看成一對,除了執行的是減法命令之外,其他的與add完全相同。比如在暫存器方面,sub也不支援對段暫存器進行操作。

4.loop指令

loop在彙編中用作迴圈,會執行標號到loop之間的部分,迴圈結束條件是cx暫存器的值為0。下面是乙個例子,令ax暫存器中的值累加6次。

assume cs:code

code segment

mov ax,0

mov cx,6

s: inc ax

loop s

mov ax,4c00h

int 21h

code ends

end

約定一下,(***)代表***暫存器中的值。

迴圈部分的執行流程為,遇到loop指令的時候,(cx)先減1,如果(cx)==0,則迴圈結束,執行下一條語句,否則調到標號對應的位置。這裡有乙個容易迷惑人的地方,就是如果先判斷(cx)-1的值,那迴圈只執行了5次,那如何做到的使(ax)為6呢。原因很簡單,在第一次遇到標號s對應的彙編指令時,該指令會執行一次,無視標號。(標號並不是指令,只是起到指示位址的作用,編譯後會被轉化為實際的位址。)只有在遇到loop指令時,才會進行判斷,然後選擇是否跳轉到標號的位置執行相應的命令。

執行一下程式,執行debug程式,觀察程式執行的每一步。

inc第一次執行,cx暫存器並不受影響

執行到loop的時候,cx暫存器發生了變化。而且可以看到,在被編譯後,s已經沒有了,變成了其實際的ip暫存器的位置0006。

後面就不全展示了。

5.div指令

該指令用於除法運算,除數存放在乙個8位暫存器中,被除數在存放在ax中。得到的商在al暫存器中,餘數在ah暫存器中。

下面是乙個例子。

mov ax,26

mov bl,10

div bl

觀察一下暫存器中的值。

6.inc指令

在之前說到loop指令的時候已經演示過用法了,該指令的作用是使暫存器中的值自增1。(需要注意該命令同樣不能用於段暫存器)

7.and和or指令

and指令和or指令分別用來將兩個資料進行和、或的運算。舉個例子:

and ax,0000000011111111b

or bl,11111111b

彙編中的資料

組合語言支援數字型資料和字元型資料。

數字型資料支援3種數制,包括10進製,16進製制和2進製,可以靠字尾來區分。10進製沒有字尾,16進製制字尾為h,2進製字尾為b,字尾不區分大小寫。

字元型資料則是直接寫上字元加單引號即可,比如mov al,'d'。

組合語言學習

參考書籍 組合語言 王爽 著 清華大學出版社 選單導航 一 彙編基礎知識 二 暫存器和常見彙編指令演示 一 基礎知識 1 彙編指令是機器指令的助記符,同機器指令一一對應 2 每一種cpu都有自己的彙編指令集 3 cpu可以直接使用的資訊在儲存器中存放 4 在儲存器中指令和資料沒有任何區別,都是二進位...

組合語言學習筆記

學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...

組合語言學習四

本人比較懶,可能懶得對前面的文章進行整理,也不怎麼喜歡寫很多,呵呵。今天往後的系列可能會更懶一些,基本翻譯jones 1 and.bartlett.publishers.introduction.to.80x86.assembly.language.and.computer.architecture...