实验一:十六位机运算器实验
一、实验目的
掌握十六位机字与字节运算的数据传输格式,验证运算功能发生器及进位控制的组合功能。
通过实验进一步了解运算器的工作原理。
二、实验要求
完成算术、逻辑、移位运算实验,熟悉ALU运算控制位的运用。
三、实验原理
实验中所用的运算器数据通路如图1-1所示。ALU运算器由CPLD描述。运算器的输出经过2片74LS245三态门与数据总线相连,2个运算寄存器AX、BX的数据输入端分别由4个74LS574锁存器锁存,锁存器的输入端与数据总线相连,准双向I/O输入输出端口用来给出参与运算的数据,经2片74LS245三态门与数据总线相连。
图1-1 运算器数据通路
图1-1中,AXW、BXW在“搭接态”由实验连接对应的二进制开关控制,“0”有效,通过【单拍】按钮产生的负脉冲把总线上的数据打入,实现AXW、BXW写入操作。
四、运算器功能编码
表1-1 ALU运算器编码表
算术运算
M15 M13 M12 M11 M 0 0 0 0 S2 0 0 0 0 S1 0 0 1 1 S0 0 1 0 1 功能 A+B+C A—B—C RLC RRC M15 M 1 1 1 1 逻辑运算 M13 S2 0 0 0 0 M12 S1 0 0 1 1 M11 S0 0 1 0 1 功能 读B 非A A-1 A=0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 A+B A—B RL RR 1 1 1 1 1 1 1 1 0 0 1 1 0 1 0 1 A||B A&B A+1 读A
五、实验连线
将实验系统设置为手动/搭接状态,K23~K0置“1”,灭M23~M0控位显示灯。然后按下表要求“搭接”部件控制电路。
连线 1 2 3 4 5 6 7 8 9 10 11 12 13 信号孔 DRCK W XP X2 X1 X0 M S2 S1 S0 OP AXW BXW 接入孔 CLOCK K6(M6) K7(M7) 作用 单元手动实验状态的时钟来源 总线字长:0=16位字操作,1=8位字节操作 源部件奇偶标志:0=偶寻址,1=奇寻址 有效电平 上升沿打入 低电平有效 低电平有效 K10(M10) 源部件定义译码端X2 K9(M9) K8(M8) 源部件定义译码端X1 源部件定义译码端X0 K15(M15) 运算控制位:0=算术运算,1=逻辑运算 K13(M13) 运算状态位S2 K12(M12) 运算状态位S1 K11(M11) 运算状态位S0 K16(M16) 目标部件奇偶标志:0=偶寻址,1=奇寻址 K17(M17) AX运算寄存器写使能,本例定义到M17位 K18(M18) BX运算寄存器写使能,本例定义到M18位 算术运算
1. 字算术运算 (1) 字写操作
通过I/O单元“S15~S0”开关向累加器AX和暂存器BX置数,操作步骤如下:
数据来源 I/O单元 X2 X1 X0=100 W XP OP=000
I/O置数 I/O=1122h 寄存器AX (1122h) AXW(M17)=0 BXW(M18)=1 按【单拍】按钮
I/O置数 I/O=3344h 寄存器BX (3344h) AXW(M17)=1 BXW(M18)=0 按【单拍】按钮
(2) 字读操作
关闭AX、BX写使能,令AXW(M18)=BXW(M17)=1,按下流程分别读AX、BX。 数据来源 ALU 读AX 数据总线 显示AX值 读BX 数据总线 显示BX值 M=1 X2 X1 X0=110
W XP OP=000 S2 S1 S0=111
M=1
S2 S1 S0=000
(3) 字加法与减法运算(不带进位加、不带错位减)
令M S2 S1 S0(K15 K13~K11)=0100,FUN及总线单元显示AX+BX的结果。 令M S2 S1 S0(K15 K13~K11)=0101,FUN及总线单元显示AX-BX的结果。
2. 字节算术运算
(1) 偶字节写(置数操作)
通过I/O单元“S15~S0”开关向累加器AL和暂存器BL置数,具体操作步骤如下:
数据来源 I/O单元 X2 X1 X0=100 W XP OP=100
I/O置数 I/O=XX22h 寄存器AL (22h) AXW(M17)=0 BXW(M18)=1 按【单拍】按钮
I/O置数 I/O=XX44h 寄存器BL (44h) AXW(M17)=1 BXW(M18)=0 按【单拍】按钮
(2) 偶字节读操作(运算寄存器AL和BL内容送总线)
关闭AL、BL写使能,令AXW(M18)=BXW(M17)=1,按下流程分别读AL、BL。
数据来源 ALU 读AL 数据总线 显示AL值 读BL 数据总线 显示BL值 M=1 X2 X1 X0=110
W XP OP=100 S2 S1 S0=111
M=1
S2 S1 S0=000
(3) 字节加减法算术运算(不带进位加、不带错位减)
令M S2 S1 S0(K15 K13~K11)=0100,FUN及总线单元显示AL+BL的结果。 令M S2 S1 S0(K15 K13~K11)=0101,FUN及总线单元显示AL-BL的结果。
逻辑运算
1. 字逻辑运算
(1) 字写操作(置数操作)
通过I/O单元“S15~S0”开关向累加器AX和暂存器BX置数,操作步骤如下:
数据来源 I/O单元 X2 X1 X0=100 W XP OP=000
I/O置数 I/O=1122h 寄存器AX (1122h) AXW(M17)=0 BXW(M18)=1 按【单拍】按钮
I/O置数 I/O=3344h 寄存器BX (3344h) AXW(M17)=1 BXW(M18)=0 按【单拍】按钮
(2) 字节读操作(运算寄存器AX和BX内容送总线)
关闭AX、BX写使能,令AXW(K18)=BXW(K17)=1,按下流程分别读AX、BX。
数据来源 ALU 读AX 数据总线 显示AX值 读BX 数据总线 显示BX值 M=1 X2 X1 X0=110
W XP OP=000 S2 S1 S0=111
M=1
S2 S1 S0=000
(3) 字逻辑运算
令M S2 S1 S0(K15 K13~K11)=1101,为逻辑与,FUN及总线显示AX逻辑与BX的结果。
令M S2 S1 S0(K15 K13~K11)=1100,为逻辑或,FUN及总线显示AX逻辑或BX的结果。
2. 字节逻辑运算
(1) 偶字节写操作(置数操作)
通过I/O单元“S15~S0”开关向累加器AL和暂存器BL置数,具体操作步骤如下:
数据来源 I/O单元 X2 X1 X0=100 W XP OP=100
置数 I/O=XX22h 寄存器AL (22h) AXW(M17)=0 BXW(M18)=1 按【单拍】按钮
置数 I/O=XX44h 寄存器BL (44h) AXW(M17)=1 BXW(M18)=0 按【单拍】按钮
(2) 偶字节读操作(运算寄存器AL和BL内容送数据总线)
关闭AL、BL写使能,令AXW(K17)=BXW(K18)=1,按下流程分别读AL、BL。
数据来源 ALU 读AL 数据总线 显示AL值 读BL 数据总线 显示BL值 M=1 X2 X1 X0=110
W XP OP=100 S2 S1 S0=111
M=1
S2 S1 S0=000
① 运算控制位设为(M S2 S1 S0=1111)则F=AL,即AL内容送到数据总线。 ② 运算控制位设为(M S2 S1 S0=1000)则F=BL,即BL内容送到数据总线。
(3) 偶字节逻辑运算
令M S2 S1 S0(K15 K13~K11)=1101,为逻辑与,FUN及总线显示AL逻辑与BL的结果。
令M S2 S1 S0(K15 K13~K11)=1100,为逻辑或,FUN及总线显示AL逻辑或BL的结果。
(4) 奇字节写操作(置数操作)
通过I/O单元“S15~S0”开关向累加器AH和暂存器BH置数,具体操作步骤如下:
数据来源 I/O单元 X2 X1 X0=100 W XP OP=101
置数 I/O=XX22h 寄存器AH (22h) AXW(M17)=0 BXW(M18)=1 按【单拍】按钮
置数 I/O=XX66h 寄存器BH (66h) AXW(M17)=1 BXW(M18)=0 按【单拍】按钮
(5) 奇字节读操作(运算寄存器AH和BH内容送数据总线)
关闭AH、BH写使能,令AXW(K18)=BXW(K17)=1,按下流程分别读AH、BH。
数据来源 ALU 读AH 数据总线 显示AH值 读BH 数据总线 显示BH值 M=1 X2 X1 X0=110
W XP OP=110 S2 S1 S0=111
M=1
S2 S1 S0=000
① 运算控制位设为(M S2 S1 S0=1111)则F=AH,即AH内容送到数据总线。 ② 运算控制位设为(M S2 S1 S0=1000)则F=BH,即BH内容送到数据总线。
(6) 奇字节逻辑运算
令M S2 S1 S0(K15 K13~K11)=1101,为逻辑与,FUN及总线显示AH逻辑与BH的结果。
令M S2 S1 S0(K15 K13~K11)=1100,为逻辑或,FUN及总线显示AH逻辑或BH的结果。
移位运算
标准运算器的累加器A在运算中通常含有移位的功能,为了规范运算器的设计,Dais-CMX16+在移位运算时把累加器A视为移位的源寄存器,也就是说移位是通过累加器A实现的,这种规范的设计理念使我们的运算器能够与标准机微机系统相吻合,达到可以面向源程序级(汇编及C语言)的水准。
1. 移位控制编码
表1-2移位编码表
M15 M13 M12 M11 M 0 0 0 0 S2 1 1 0 0 S1 1 1 1 1 S0 1 0 1 0 功能 RR RL RRC RLC
2. 移位执行过程
① 循环左移
② 循环右移
③ 带进位循环左移
CY
④ 带进位循环右移
CY
所谓循环移位,就是指移位时数据的首尾相连进行移位,即最高(最低)位的移出位又移入数据的最低(最高)位。根据循环移位时进位位是否一起参加循环,可将循环移位分为不带进位循环和带进位循环两类。其中不带进位循环是指进位“CY”的内容不与数据部分一起循环移位,也称小循环。带进位循环是指进位 “CY”中的内容与数据部分一起循环移位,也称大循环。
◆不带进位循环左移:各位按位左移,最高位移入最低位。 ◆不带进位循环右移:各位按位右移,最低位移入最高位。
◆带进位循环左移:各位按位左移,最高位移入C中,C中内容移入最低位。 ◆带进位循环右:各位按位右移,最低位移入C中,C中内容移入最高位。 循环移位一般用于实现循环式控制、高低字节的互换,还可以用于实现多倍字长数据的算术移位或逻辑移位。
3. 字移位运算
(1) 向AX寄存器置数
拨动“I/O输入输出单元”开关向移位源寄存器AX置数,具体操作步骤如下:
数据来源 I/O单元 置数 I/O=0080h 寄存器AX (0080h) 关闭数据来源 X2 X1 X0=100 W XP OP=000 AXW(M17)=0 按【单拍】按钮
X2 X1 X0=111
(2) AX寄存器移位
数据来源 AX 移位控制 M=0 S1=1 数据总线显示移位结果 移位结果 打入AX X2 X1 X0=110 S2 S0方式选择 W XP=00
AXW(M17)OP=0 0 按【单拍】按钮
令M=0 S1=1参照表1-2改变S2、S0的状态,再按动【单拍】按钮,观察AX移位变化。
4. 字节移位运算 (1) AL寄存器置数
拨动“I/O输入输出单元”开关向移位源寄存器AL置数,具体操作步骤如下:
数据来源 I/O单元 置数 I/O=XX80h 寄存器AL (80h) 数据来源关闭 X2 X1 X0=100 W OP XP=100 AXW=0 按【单拍】按钮
X2 X1 X0=111
(2) AL寄存器移位
数据来源 AL 移位控制 M=0 S1=1 数据总线显示移位结果 移位结果 打入AL X2 X1 X0=110 S2 S0方式选择 W XP=10
AXW(M17) OP=00按【单拍】按钮
令M=0 S1=1参照表1-2改变S2、S0的状态,再按动【单拍】按钮,观察AL移位变化。
(3) AH寄存器置数
拨动“I/O输入输出单元”开关向移位源寄存器AH置数,具体操作步骤如下:
数据来源 I/O单元 置数 I/O=XX80h 寄存器AH (08h) 关闭数据来源 X2 X1 X0=100 W XP OP=101
(4) AH寄存器移位
数据来源 AH 移位控制 M=0 S1=1 AXW=0 按【单拍】按钮
X2 X1 X0=111
数据总线显示移位结果
移位结果 打入AH X2 X1 X0=110 S2 S0方式选择 W XP=11
AXW OP=01 按【单拍】按钮
令M=0、S1=1参照表1-2改变S2、S0的状态,再按动【单拍】按钮,观察AH移位变化。
实验思考
验证表1-3 ALU运算器编码表所列的运算功能。 在给定AX=6655h、BX=AA77h的情况下,改变运算器的功能设置,观察运算器的输出,填入下页表格中,并和理论分析进行比较、验证。
表1-3 ALU运算器真值表
运算控制 运算表达式 A+B+C A-B-C RLC A RRC A A+B A-B RL A RR A B NOT A A-1 0 A OR B A AND B A+1 A M 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 S2 S1 S0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 AX BX 运算结果 带进位算术加 带借位算术减 带进位左移 带进位右移 算术加 算术减 左移 右移 取BX值 AX取反 AX减1 清零 逻辑或 逻辑与 AX加1 取AX值 6655 AA77 FUN=( 10CC ) 6655 AA77 FUN=( BBDE ) 6655 AA77 FUN=( CCAA ) FUN=( ) FUN=( ) FUN=( ) FUN=( ) FUN=( ) 6655 AA77 FUN=( AA77 ) 6655 AA77 FUN=( 99AA ) 6655 AA77 FUN=( 6654 ) FUN=( ) FUN=( ) FUN=( ) FUN=( ) FUN=( )
因篇幅问题不能全部显示,请点此查看更多更全内容