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