8086寄存器


1:數據寄存器,一般稱之為通用寄存器組

     8086 有8個8位數據寄存器,
     這些8位寄存器可分別組成16位寄存器:
     AH&AL=AX:累加寄存器,常用於運算;
     BH&BL=BX:基址寄存器,常用於地址索引;
     CH&CL=CX:計數寄存器,常用於計數;
     DH&DL=DX:數據寄存器,常用於數據傳遞。

   2:地址寄存器/段地址寄存器

     為了運用所有的內存空間,8086設定了四個段寄存器,專門用來保存段地址:
     CS(Code Segment):代碼段寄存器;
     DS(Data Segment):數據段寄存器;
     SS(Stack Segment):堆棧段寄存器;
     ES(Extra Segment):附加段寄存器。

3:特殊功能的寄存器

     IP(Instruction Pointer):指令指針寄存器,與CS配合使用,可跟蹤程序的執行過程;
     SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置。
     BP(Base Pointer):基址指針寄存器,可用作SS的一個相對基址位置;
     SI(Source Index):源變址寄存器可用來存放相對於DS段之源變址指針;
     DI(Destination Index):目的變址寄存器,可用來存放相對於 ES 段之目的變址指針。
二、si,di使用的例子
SIDI是8086CPU中和bx功能相近的寄存器,SIDI不能夠分成兩個8位寄存器來使用.

下面三組指令實現了相同的功能:

(1) mov bx,0

      mov ax,[bx]

(2) mov si,0

      mov ax,[si]

(3) mov di,0

      mov ax,[di]

下面的三組指令也實現了相同的功能:

(1) mov bx,0

mov ax,[bx+123]

(2) mov si,0

mov ax,[si+123]

(3) mov di,0

mov ax,[di+123]

用寄存器SI和DI實現將字符串 'welcome to masm!' 復制到它后面的數據區中.

assume cs:codesg,ds:datasg

datasg segment

db 'welcome to masm!'

db '............................'

datasg ends

分析:

我們編寫的程序大都是進行數據的處理,而數據在內存中存放,所以我們在處理數據之前首先要搞清楚數據存儲在什么地方,也就是說數據的內存地址.現在我們要對datasg段中的數據進行復制,我們先來看以下要復制的數據在什么地方,

datasg:0,這是要進行復制的數據的地址.那么復制到那里去呢?它后面的數據區.'welcome to masm!'從偏移地址0開始存放,長度為16個字節,所以,他們后面的數據區的偏移地址為16,就是字符串所要存放的空間,清楚了地址之后,我們就可以進行處理了.我們的ds:si指向要復制的原始字符串,用ds:di指向復制的目的空間,然后一個循環來完成復制,

代碼如下:

codesg segment

start:mov ax,datasg

mov ds,ax

mov si,0

mov di,16

mov cx,8

s:mov ax,[si]

mov [di],ax

add si,2

add di,2

loop s

mov ax,4c00H

int 21H

codesg ends

end start

注意在程序中, 我們用的16位寄存器進行內存單元之間的數據傳送,一次復制2個字節,一共循環8次(si和di每次加2)



用更少的代碼,實現:

分析:

我們可以利用[bx(si或di)+idata]的方式,來使程序變得簡潔.如下:

codesg segment

start:mov ax,datasg

mov ds,ax

mov si,0

mov cx,8

s:mov ax,0[si]

mov 16[ax],ax

add si,2

loop s

mov ax,4c00H

int 21H

codesg ends

end start


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM