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