梁伟
寄存器被广泛应用于数字电路和计算机中,是由具有存储功能的触发器构成的,移位寄存器在移位脉冲作用下依次逐位右移或左移,通过proteus模拟软件进行直观分析移位寄存器移位功能,移位功能可应用于CPU内部寄存器进行算术运算。
【关键词】移位寄存器 CPU算术运算
1 移位寄存器
寄存器被广泛应用于数字电路和计算机中,是由具有存储功能的触发器构成的。移位寄存器具有代码寄存和移位两个功能,在移位脉冲的作用下,数码如向左移一位,则称为左移,反之称为右移。移位寄存器具有单向移位功能的称为单向移位寄存器,即可向左移也可向右移的称为双向移位寄存器。
2 移位寄存器的算术运算
如图1所示为由D触发器组成的4位串行输入-并行输出左移位寄存器,图中各触发器的CP接在一起作为移位脉冲控制端(CP脉冲同步控制),数据从最低位触发器D输入,前一触发器输出端和后一触发器D端连接。
由于CP接在一起作为脉冲控制端,当第1个CP脉冲上升沿到来时,D1触发器输出Q1是根据输入数据D改变,D2触发器Q2输出是根据Q1数据改变,D3触发器Q3输出是根据Q2数据改变,D4触发器Q4输出是根据Q3的数据改变。单向右移寄存器移位过程如下:
(1)清零,只要=0,触发器直接置0。
(2)接收数据,当=1时,第1个CP脉冲后,输入信号d4d3d2d1=1101左移1位,寄存器状态从高位到低位为Q4Q3Q2Q1=0001。
(3)第2个CP脉冲后,输入信号d4d3d2d1=1101在移2位,寄存器状态为Q4Q3Q2Q1=0011。
(4)第3个CP脉冲后,输入信号d4d3d2d1=1101在移3位,寄存器状态为Q4Q3Q2Q1=0110。
(5)第4个CP脉冲后,输入信号d4d3d2d1=1101在移4位,寄存器状态为Q4Q3Q2Q1=1101。
即在四个CP脉冲作用后,数码d4d3d2d1=1101恰好全部左移位串行输入寄存器,寄存器输出状态从高位到低位为Q4Q3Q2Q1=1101从四个触发器的输出端并行输出,完成串行输入--并行输出。要完成向右移位的串行输入--串行输出的寄存功能,还需要加入四个CP脉冲,才能完成寄存器中的1101依次移出,即8个CP脉冲完成串行输入-串行输出。
寄存器移位功能可应用于CPU进行算术运算,80X86 CPU内部寄存器可以分为程序可见的寄存器和程序不可见的寄存器两大类:程序可见的寄存器分为段寄存器(CS,DS,ES,SS);数据寄存器AX,BX,CX,DX等。数据寄存器用来存放计算的结果和操作数,AX累加器,BX基址寄存器,CX计数器,DX数据寄存器,每个寄存器又有它们各自的专用目的。AX,BX,CX,DX都是16位的寄存器,每一个又可以分为高8位和低8位来使用,AH高8位,AL低8位。
移位指令实现对操作数移位,包括算术移位指令、逻辑移位指令和循环移位指令。SHL和SAL指令的功能相同,使用这组指令除了可以实现基本的移位操作外,还可以用于对一个数进行2n的倍增运算,算术左移和逻辑左移指令SAL(SHL)格式与功能。
(1)格式:SHL (SAL)OPR,CNT;对一个无(有)符号数的进行2n的倍增。
(2)功能:将OPR向左移动CNT指定的次数,最低位补入0,CF内容为OPR最后移出位的值。
(3)操作数的类型:OPR目标操作数 通用寄存器;存储器。源操作数:1;CL。
(4)标志:根据结果设置ZF,SF,PF,OF,CF;AF未定义。
(5)编写汇编程序:设(AL)=0000 1101B=13=0DH,则执行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
經过汇编程序调试运行,观察到(AL)=13,每执行1次左移指令,(AL)×2,执行5次左移指令后,(AX)=00A0H=160,CY=1,有进位,256+160=416,即13×32=416。SHL指令功能是可以用于对一个数进行2n倍增运算,使用这种方法比直接使用乘除法效率要高得多。
参考文献
[1]阎石主编.数字电子技术基础[R].清华大学电子教研组,2011.
[2]沈美明,温冬婵.IBM-PC汇编语言程序设计[D].清华大学,2013.
作者单位
大连计算机职业中专 辽宁省大连市 116034