梁偉
寄存器被廣泛應(yīng)用于數(shù)字電路和計算機中,是由具有存儲功能的觸發(fā)器構(gòu)成的,移位寄存器在移位脈沖作用下依次逐位右移或左移,通過proteus模擬軟件進(jìn)行直觀分析移位寄存器移位功能,移位功能可應(yīng)用于CPU內(nèi)部寄存器進(jìn)行算術(shù)運算。
【關(guān)鍵詞】移位寄存器 CPU算術(shù)運算
1 移位寄存器
寄存器被廣泛應(yīng)用于數(shù)字電路和計算機中,是由具有存儲功能的觸發(fā)器構(gòu)成的。移位寄存器具有代碼寄存和移位兩個功能,在移位脈沖的作用下,數(shù)碼如向左移一位,則稱為左移,反之稱為右移。移位寄存器具有單向移位功能的稱為單向移位寄存器,即可向左移也可向右移的稱為雙向移位寄存器。
2 移位寄存器的算術(shù)運算
如圖1所示為由D觸發(fā)器組成的4位串行輸入-并行輸出左移位寄存器,圖中各觸發(fā)器的CP接在一起作為移位脈沖控制端(CP脈沖同步控制),數(shù)據(jù)從最低位觸發(fā)器D輸入,前一觸發(fā)器輸出端和后一觸發(fā)器D端連接。
由于CP接在一起作為脈沖控制端,當(dāng)?shù)?個CP脈沖上升沿到來時,D1觸發(fā)器輸出Q1是根據(jù)輸入數(shù)據(jù)D改變,D2觸發(fā)器Q2輸出是根據(jù)Q1數(shù)據(jù)改變,D3觸發(fā)器Q3輸出是根據(jù)Q2數(shù)據(jù)改變,D4觸發(fā)器Q4輸出是根據(jù)Q3的數(shù)據(jù)改變。單向右移寄存器移位過程如下:
(1)清零,只要=0,觸發(fā)器直接置0。
(2)接收數(shù)據(jù),當(dāng)=1時,第1個CP脈沖后,輸入信號d4d3d2d1=1101左移1位,寄存器狀態(tài)從高位到低位為Q4Q3Q2Q1=0001。
(3)第2個CP脈沖后,輸入信號d4d3d2d1=1101在移2位,寄存器狀態(tài)為Q4Q3Q2Q1=0011。
(4)第3個CP脈沖后,輸入信號d4d3d2d1=1101在移3位,寄存器狀態(tài)為Q4Q3Q2Q1=0110。
(5)第4個CP脈沖后,輸入信號d4d3d2d1=1101在移4位,寄存器狀態(tài)為Q4Q3Q2Q1=1101。
即在四個CP脈沖作用后,數(shù)碼d4d3d2d1=1101恰好全部左移位串行輸入寄存器,寄存器輸出狀態(tài)從高位到低位為Q4Q3Q2Q1=1101從四個觸發(fā)器的輸出端并行輸出,完成串行輸入--并行輸出。要完成向右移位的串行輸入--串行輸出的寄存功能,還需要加入四個CP脈沖,才能完成寄存器中的1101依次移出,即8個CP脈沖完成串行輸入-串行輸出。
寄存器移位功能可應(yīng)用于CPU進(jìn)行算術(shù)運算,80X86 CPU內(nèi)部寄存器可以分為程序可見的寄存器和程序不可見的寄存器兩大類:程序可見的寄存器分為段寄存器(CS,DS,ES,SS);數(shù)據(jù)寄存器AX,BX,CX,DX等。數(shù)據(jù)寄存器用來存放計算的結(jié)果和操作數(shù),AX累加器,BX基址寄存器,CX計數(shù)器,DX數(shù)據(jù)寄存器,每個寄存器又有它們各自的專用目的。AX,BX,CX,DX都是16位的寄存器,每一個又可以分為高8位和低8位來使用,AH高8位,AL低8位。
移位指令實現(xiàn)對操作數(shù)移位,包括算術(shù)移位指令、邏輯移位指令和循環(huán)移位指令。SHL和SAL指令的功能相同,使用這組指令除了可以實現(xiàn)基本的移位操作外,還可以用于對一個數(shù)進(jìn)行2n的倍增運算,算術(shù)左移和邏輯左移指令SAL(SHL)格式與功能。
(1)格式:SHL (SAL)OPR,CNT;對一個無(有)符號數(shù)的進(jìn)行2n的倍增。
(2)功能:將OPR向左移動CNT指定的次數(shù),最低位補入0,CF內(nèi)容為OPR最后移出位的值。
(3)操作數(shù)的類型:OPR目標(biāo)操作數(shù) 通用寄存器;存儲器。源操作數(shù):1;CL。
(4)標(biāo)志:根據(jù)結(jié)果設(shè)置ZF,SF,PF,OF,CF;AF未定義。
(5)編寫匯編程序:設(shè)(AL)=0000 1101B=13=0DH,則執(zhí)行5次左移指令后,(AL)=?
data segment
FIRST DW ?
data ends
code segment
assume cs:code, ds:data
start: MOV AX, DATA
MOV DS, AX
XOR AX,AX
mov al,13
shl al,1
shl al,1
shl al,1
shl al,1
shl al,1
mov ah,4ch
int 21h
code ends
end start
D:\ASMSTU~1\SOURCE\OUT>debug shl.exe
-ucs:0
1638:0000 B82F16 MOV AX,162F
………
AX=0000 BX=0000 CX=0353 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
1638:0007 B00D MOV AL,0D // (AX)=0000H
-t //單步運行(以下相同)
AX=000D BX=0000 CX=0353 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
1638:0009 D0E0 SHL AL,1 // (AX)=000DH=13
AX=001A BX=0000 CX=0353 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
1638:000B D0E0 SHL AL,1 // (AX)= 001AH=26
AX=0034 BX=0000 CX=0353 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
1638:000D D0E0 SHL AL,1 // (AX)= 0034H=52
AX=0068 BX=0000 CX=0353 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
1638:000F D0E0 SHL AL,1 // (AX)= 0068H=104
AX=00D0 BX=0000 CX=0353 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
DS=162F ES=161F SS=1630 CS=1638 IP=0011 OV UP EI NG NZ NA PO NC
1638:0011 D0E0 SHL AL,1 // (AX)= 00D0H=208 ,CY=0
AX=00A0 BX=0000 CX=0353 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
DS=162F ES=161F SS=1630 CS=1638 IP=0013 NV UP EI NG NZ NA PE CY
1638:0013 B44C MOV AH,4C // (AX)= 00A0H=160 , CY=1
經(jīng)過匯編程序調(diào)試運行,觀察到(AL)=13,每執(zhí)行1次左移指令,(AL)×2,執(zhí)行5次左移指令后,(AX)=00A0H=160,CY=1,有進(jìn)位,256+160=416,即13×32=416。SHL指令功能是可以用于對一個數(shù)進(jìn)行2n倍增運算,使用這種方法比直接使用乘除法效率要高得多。
參考文獻(xiàn)
[1]閻石主編.數(shù)字電子技術(shù)基礎(chǔ)[R].清華大學(xué)電子教研組,2011.
[2]沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計[D].清華大學(xué),2013.
作者單位
大連計算機職業(yè)中專 遼寧省大連市 116034