汇编常用寄存器
本文索引
- 一、數據寄存器(AX、BX、CX、DX寄存器)
- 二、變址寄存器(SI寄存器、DI寄存器)
- 三、指針寄存器(BP寄存器、SP寄存器)
- 四、段寄存器(DS寄存器、ES寄存器)
????????匯編寄存器主要分兩類,通用寄存器和特殊功能寄存器。
????????通用寄存器可用于傳送和暫存數據,也可參與算術邏輯運算,保存運算結果。除此之外,它們還各自具有一些特殊功能。通用寄存器的長度取決于機器字長,匯編語言程序員必須熟悉每個寄存器的一般用途和特殊用途,只有這樣,才能在程序中做到正確、合理地使用它們。16位cpu通用寄存器共有8個:AX、BX、CX、DX、BP、SP、SI、DI。32位cpu通用寄存器共有8個: EAX、EBX、ECX、EDX、EBP、ESP、ESI、EDI功能和16位CPU差不多。
一、數據寄存器(AX、BX、CX、DX寄存器)
????????AX、BX、CX、DX可以稱作數據寄存器,這4個16位寄存器又可分別分成高8位(AH、BH、CH、DH)和低8位(AL、BL、CL、DL)。因此它們既可作為4個16位數據寄存器使用,也可作為8個8位數據寄存器使用。在編程時可存放源操作數、目的操作數或運算結果。數據寄存器是存放操作數、運算結果和運算的中間結果,以減少訪問存儲器的次數,或者存放從存儲器讀取的數據以及寫入存儲器的數據的寄存器。
- AX(accumulator)累加器。是算術運算的主要寄存器。在乘、除等指令中指定用來存放操作數,以及所有的 I/O指令都使用這一寄存器與外部設備傳送信息。
- BX(base)基址寄存器。常做存放地址使用。
- CX(count)計數器。常用來保存計數值,如在循環、位移和串處理指令中作隱含計數器。
- DX(data)數據。一般在作雙字長運算時把DX和AX組合在一起存放一個雙字長數,DX用來存放高位數。對于某些I/O操作,DX可用來存放I/O的端口地址。
上述寄存器均可用作通用寄存器。
二、變址寄存器(SI寄存器、DI寄存器)
????????SI是源變址寄存器,DI是目的變址寄存器。一般用來存放地址偏移,也可以用來存放數據。但需要注意的是:在串處理指令中,SI用作隱含的源串地址,默認在DS中;DI用做隱含的目的串地址,默認在ES中;此時不能混用。
mov ax,1000H mov ds,ax mov si,2 mov ax,[si] ! ds:si = 1000H + 2即把ds偏移2位置數據取出賦值給ax。
三、指針寄存器(BP寄存器、SP寄存器)
- SP(stack pointer)堆棧寄存器,SP寄存器存放棧的偏移地址。
- BP(base pointer)基數指針寄存器BP,它的用途有點特殊,需和堆棧指針SP聯合使用的,作為SP校準使用的,只有在尋找堆棧里的數據和使用個別的尋址方式時候才能用到。比如說,堆棧中壓入了很多數據或者地址,你肯定想通過SP來訪問這些數據或者地址,但SP是要指向棧頂的,是不能隨便亂改的,這時候你就需要使用BP,把SP的值傳遞給BP,通過BP來尋找堆棧里數據或者地址.
BP作為基址寄存器,一般在函數中用來保存進入函數時的SP的棧頂基址。
每次子函數調用時,系統在開始時都會保存這個兩個指針并在函數結束時恢復SP和BP的值。
四、段寄存器(DS寄存器、ES寄存器)
????????DS(Data Segment)和 ES(Extra Segment)都屬于段寄存器,用于存放的就是某個段地址。
下面看一個介紹使用 DS 寄存器的 Demo:
ASSUME CS:CODESCODES SEGMENTSTART:MOV AX,1000HMOV DS,AXMOV AL,1MOV BX,0MOV CX,5 ;設計一個循環,讓其循環 5 次s: MOV [BX],AL ;這里 [BX] = (DS:BX)INC ALINC BXLOOP s MOV AH,4CHINT 21H CODES ENDSEND START上面的代碼所做的事情,就是通過循環將 1,2,3,4,5 寫入到地址(1000H:0000H)、(1000H:0001H)、(1000H:0002H)、(1000H:0003H)、(1000H:0004H)。
注:CPU不支持直接將立即數送入段寄存器中,如下操作方式不合法:
MOV DS,1000H !! 非法操作總結
- 上一篇: 【线性模型引论】王松桂 课后习题2.1
- 下一篇: log4j配置文件位置详解