实验二 算术运算实验
- 格式:docx
- 大小:415.27 KB
- 文档页数:14
汇编语言实验报告(二)班级:01540802班姓名:南征学号: 20080705信息与电子学院实验二算术运算一、实验目的熟悉利用汇编语言对多精度十六进制和十进制的编程方法,弄清带符号数及不带符号数的运算区别,理解各状态标志位的含义,以及运算结果对各状态标志的影响,掌握无符号数的乘除法运算并保证运算结果不溢出。
二、实验要点对汇编语言的算术运算要分清是有符号的运算还是无符号的运算,当对无符号数进行加减时,要考虑进位CF,对于有符号数进行加减时,要考虑运算结果是否溢出。
为防止溢出,常将操作数利用CBW或CWD指令进行符号扩展后再进行加减运算。
对于多精度的加减运算时,对高位字节或字的加减法要分别采用ADC和DBB;对低位字节或字采用不带进位的加减指令ADD和SUB;在利用循环计算多字节的加减法时,可以用CLC指令将CF初始化为0,然后在循环体内统一使用带进位(或借位)的加减法指令。
在汇编语言进行十进制的加减运算时,首先需将操作数用BCD码示,并且要考虑操作数是用组合的BCD码还是用一个字节表示一个十进制数。
对于组合的BCD码加减法,其结果应放在AL寄存器中,再用DAA和DAS指令进行二——十进制调整。
二对于未组合的BCD码加减法,用AAA和AAS对结果进行二——十进制调整。
此外在进行十进制数减法时,要考虑用大数减小数,因为十进制数运算不能用补码表示。
对于有符号数惩罚要用IMUL指令,对无符号数乘法要用MUL指令。
字乘时AX为约定的一个乘数,其积在DX:AX中;字节相乘时AL为约定的一个乘数,其积在AX中。
乘法指令中的操作数,不得为立即数,可以为通用寄存器或存储器操作数。
对于除法要用IDIV、DIV分别对有符号数和无符号数进行除法运算。
字除法时被除数约定在DX:AX中;字节相除时,被除数约定在AX中,除法指令中的操作数可以为通用寄存器或者存储器操作数,但不得是立即数。
在进行除法运算时要考虑除数是否为零,以及其商是否溢出,在出现除零溢出时,将产生类型号为0的内部中断。
实验二运算器实验实验二运算器am2901实验该实验操作不需用到电脑,不需实现电脑和实验箱的连接,操作全部在实验箱上完成。
实验过程当中,必须认真展开,避免损毁设备,分析可能将碰到的各种现象,推论结果与否恰当,记录运转结果。
实验目的:1、深入细致介绍am2901运算芯片的功能、结构;2、深入细致介绍4片am2901的级联方式;3、深化运算器部件的组成、设计、控制与使用等知识。
教学计算机的运算器部件主体由4片4位的运算器芯片am2901彼此串联形成,它输入16位的数据运算的结果(用y则表示)和4个结果特征位(用cy,f=0000,over,f15则表示)。
它的输出(用d则表示)就可以源自于内部总线。
确定运算器运算的数据来源、运算功能、结果处置,需要使用控制器提供的i8~i0、b3~b0、a3~a0共17个信号。
运算器的输入轻易相连接至地址寄存器ar的输出插槽,用作提供更多地址总线的信息来源。
运算器的输入还经过两个8位的244器件的掌控(采用dc1译码器的ytoib#信号)被送至内部总线ib,用作把运算器中的数据或者运算结果载入内存储器或者输入输出USB芯片。
运算器产生的4个结果特征位的信息需要保存,为此设置一个4位的标志寄存器flag,用于保存这4个结果特征信息,标志寄存器的输出分别用c、z、v、s表示。
控制标志寄存器何时和如何接收送给它的信息,需要使用控制器提供的sst2~sst0三位信号。
运算器还须要按照指令继续执行的建议,正确地获得最高位的位次输出信号,最高位和最低位的移位输出信号,为此须要布局另一个shift的线路,在控制器提供更多的ssh和sci1~sci0三位信号的掌控下,产生运算器最高位的位次输出信号,最高位和最低位的移位输出信号。
相关器件:4片am2901(alu)两片ar(74ls374)一片flag(gal20v8)一片shift(gal20v8)2片244(alutoib,74ls244)2个12位微动开关(红色)3个手动掌控信号内存芯片(hand,74ls240)am2901芯片的结构和功能:参考教材附录部分芯片具体内容线路表明:1、芯片输出受oe#信号控制,仅当其为低电平时,才有y值正常逻辑信号输出,否则输出为高阻态。
北京理工大学汇编实验二报告本科实验报告实验名称:算术运算类操作实验课程名称:CPU与汇编实验实验时间:2015.10.29 任课教师:王耀威实验地点:10-102实验教师:潘丽敏实验类型:□原理验证■综合设计□自主创新学生姓名:王晓玥学号/班级:1120131332/05111311 组号:学院:信息与电子学院同组搭档:专业:信息工程成绩:一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。
6、掌握 BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、加减法处理指令主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。
2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。
3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的 BCD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。
8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表 1 所示的数据类型进行数据运算。
表 1-2-1 数据类型数据运算表数制二进制BCD码带符号无符号组合非组合运算符+、-、×、÷+、-+、-、×、÷操作数字节、字、多精度字节(二位数字)字节(一位数字)四、实验内容与步骤1、对于两组无符号数,087H 和 034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:(1)实验流程将一组操作数分别用ADD,SUB,MUL,DIV运算(2)实验代码:DATAS SEGMENTBUF1 DB 087HBUF2 DB 034HBUF3 DB 4 DUP(?);此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,0MOV SI,AX;两数相加MOV AL,BUF1MOV BL,BUF2ADD AL,BLMOV BUF3[SI],ALMOV AL,0MOV AL,0INC SIMOV BUF3[SI],AL;两数相减MOV AL,BUF1MOV BL,BUF2SUB AL,BLINC SIMOV BUF3[SI],ALMOV AL,0SBB AL,0INC SIMOV BUF3[SI],AL;两数相乘MOV AL,BUF1MOV BL,BUF2MUL BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;两数相除,AL中存放商,AH中存放余数MOV AX,0MOV AL,BUF1MOV BL,BUF2DIV BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START(3)实验结果:1)第一组操作数87H,34H2)第二组操作数0C2H,5FH(4)计算结果计算状态标志表达式结果CF AF ZF OF SF PF 087H+034H 00BB 0 0 0 0 1 1 087H-034H 0053 0 0 0 1 0 1 087H*034H 1B6C 1 0 0 1 0 0 087H/084H 02(1F) 1 0 0 0 0 1 0C2H+05FH 0121 0 0 0 0 0 0 0C2H-O5FH 0063 0 0 1 0 0 1 0C2H*05FH 47FE 0 0 0 0 0 1 0C2H/05FH 02(04) 0 0 0 0 0 0(5)各运算对状态标志位的影响及其意义。
实验二实验报告表
实验名称:
学号姓名:班级:实验时间:
实验报告表2-1 数值型数据在计算机中的二进制实验记录表
说明:本实验对计算机内存数据的存放拟定为:①整数用两个字节存储,并负数只考虑原码;②实数用4个字节存储,其中阶码部分占一个字节。
实验报告表2-2 其他进制数据与二进制转化实验记录表
实验报告表2-3 数据的原码、补码和反码表示实验记录表
实验报告表2-4 二进制算术运算实验记录表
实验报告表2-5溢出实验记录表
实验报告表2-6浮点数的小数点浮动实验记录表
实验报考表2-7 表示浮点数的二进制串中阶码位数改变实验记录表。
计算内存单元中的这三个数之和,和存放在0013H 单元中,再求出这三个数之积,乘积存放在0014单元中。
试编写完成此功能的汇编语言程序段并上机验证结果(将结果截图)。
MOV BX,0010H MOV [BX],10H MOV [BX+1],04H MOV [BX+2],30H MOV AX,0000H ADD AL,[BX] ADD AL,[BX+1] ADD AL,[BX+2]MOV DS:[0013H],AL MOV AL,[BX]MUL byte ptr [BX+1] MUL byte ptr [BX+2] MOV DS:[0014],AX3.请编写完成下述功能的汇编语言程序段。
上机验证结果,程序运行的最后结果(AX)=?(将结果截图)。
(1) 传送15H 到AL 寄存器;(2) 再将AL 的内容乘以2;(3) 接着传送15H 到BL 寄存器; (4) 最后把AL 的内容乘以BL 的内容。
(1)mov al,15h (2)mov dx,2 mul dx (3)mov bl,15h (4)mul bl实 验 内容 与 实验 结 果4.用移位指令实现将AL寄存器中的无符号数乘以10。
试编写汇编语言程序段,并上机验证结果(将结果截图)。
xor ah,ahshl ax,1mov bx,axshl ax,1shl ax,1add ax,bx5.请编写完成下述功能的汇编语言程序段。
上机验证结果,程序运行后的商=?(将结果截图)。
(1) 传送数据2058H 到DS:1000H 单元中,数据12H 到DS:1002H 单元中; (2) 把DS:1000H 单元中的数据传送到AX 寄存器; (3) 把AX 寄存器的内容算术右移二位;(4) 再把AX 寄存器的内容除以DS:1002H 字节单元中的数; (5) 最后把商存入字节单元DS:1003H 中。
MOV WORD PTR[1000H],2058H MOV BYTE PTR[1002H],12H MOV AX,[1000H] MOV BX,[1002H] SAR AX,1 SAR AX,1 DIV BXMOV [1003H],AX实 验 内容 与 实验 结 果实验内容与实验结果。
计算机组成原理实验课程实验报告实验名称运算器实验
实验二运算器
一.实验目的
了解简单运算器的数据传输通路。
验证运算功能发生器的组合功能。
掌握算术逻辑运算加、减、与的工作原理。
二.实验环境
Quartus 2 9.1
三.实验基本原理及步骤
算术逻辑单元运算器ALU181根据74LS181的功能,用VHDL硬件描述语言编辑而成,构成8位字长的ALU。
参加运算的两个8位数据分别为A[7..0]和B[7..0],运算模式由S[3..0]的16种组合决定,S[3..0]的值由4位2进制计数器LPM_COUNTER产生,计数时钟是Sclk(图2-1);此外,设M=0,选择算术运算,M=1为逻辑运算,C N为低位的进位位;
F[7..0]为输出结果,C O为运算后的输出进位位。
两个8位数据由总线IN[7..0]分别通过两个电平锁存器74373锁入,ALU功能如表所示。
四.仿真及软件设计
Vhd编程(非自己写,粘贴了群里文件):
将编程存为器件以及定制74373b,如图
bdf电路图:
五.实验结果分析及回答问题(或测试环境及测试结果)实验问题:
发现是
后来将IN[7…0]改为IN[7..0]
运行成功
仿真结果:
经检验结果正确:。
西安交通大学实验报告
课程名称:微机原理与接口技术实验名称数据传送
班级:机械36班姓名:申湾舟学号:2130101125
实验日期:2015年9 月29日教师审阅签字:1.实验目的
(1)熟悉算数逻辑运算指令和移位指令的功能;
(2)了解标志寄存器中各个标志位的意义以及指令执行对它的影响。
2.实验内容
(1)标志位改变规律;
(2)简单存储和计算;
(3)写出规定功能的程序1;
(4)写出规定功能的程序2;
(5)补全规定功能的程序;
(6)清除操作;
(7)执行已知程序;
(8)实验结果分析。
3.实验工具
操作系统:windows7;实验平台:调试工具TD.EXE。
4.实验步骤与结果
(1)标志位改变规律;
在TD.EXE中输入程序段并且单步运行,观察标志位变化。
(2)简单存储和计算;
(3)写出规定功能的程序1;
(4)写出规定功能的程序2;
(5)补全规定功能的程序;
(6)清除操作;
(7)执行已知程序;
(8)实验结果分析。
五、实验小结
Page2 of 7。
实验一运算器实验1、实验内容利用两片74LS181以并、串形式构成8位字长的ALU。
运算器的输出经过一个三态门和数据总线相连,运算器的两个数据输入端分别由两个锁存器锁存,锁存器的输入连至数据总线。
数据开关用来给出参与运算的数据,运算结果经过数据线,通过显示灯显示。
内容:1)掌握简单运算器的数据传输方式2)验证运算功能发生器及进位控制的组合功能2、实验目的及要求掌握运算器的数据传送通路;验证运算功能发生器(74LS181)的组合功能。
要求:完成不带进位及带进位算术运算实验、逻辑运算实验,了解算术逻辑运算单元的运用。
3、实验重点运算器的数据传送通路;运算功能发生器(74LS181)的组合功能。
4、实验难点运算器的数据传送通路;运算功能发生器(74LS181)的组合功能。
5、实验时间分配及进度安排3学时6、主要实验环节的组织教师提示实验原理,学生自己设计实验。
实验2.存储器实验内容:1)向静态随机存储器写入数据2)读出数据显示要求:掌握静态随机存储器工作特性及数据的读写方法实验3.数据通路组成实验内容:连接运算器实验模块和存储器实验模块要求:将运算器实验模块和存储器实验模块两部分电路连接在一起,掌握数据通路组成。
实验4.微程序控制器实验内容:1)时序信号产生器、微程序控制电路2)微指令设计格式、微程序编制要求:掌握时序产生器的组成原理、掌握微程序控制器的组成原理、掌握微程序的编制、观察微程序的运行。
实验5.模型机CPU组成与指令周期实验内容:1)连接微程序控制器模拟、运算器模块、存储器模块2)指令周期实验要求:将微程序控制器模拟,运算器模块,存储器模块组合在一起,联成一台简单的计算机,并进行指令周期实验。
实验6.基本模型机设计与实现内容:1)定义机器指令2)编写相应微程序,上机调试要求:在掌握部件单元电路实验的基础上,进一步将其组成系统地构造一台基本模型计算机,编写相应的微程序,上机调试掌握整机概念。
实验二算术逻辑运算及移位操作一.实验任务1.实验程序段及结果表格如表:分析:程序段1:MOV AX, 1018H ;AX←1018HMOV SI, 230AH ;SI←230AHADD AX, SI ;AX=3322H,低8位为00100010B,1的个数;为偶数,PF=1,同时D3向D4有进位发生,AF=1 ADD AL, 30H ;AX=3352H,低8位1个个数为奇数,PF=0 MOV DX, 3FFH ;DX←3FFHADD AX,BX ;AX=3352H,MOV [20H], 1000H ;[20H]←1000HADD [20H], AX ;[20H]=4352HPUSH AX ;POP BX ;BX=3352H程序段2:MOV AX, 0A0AH ;AX←0A0AHADD AX, 0FFFFH ;AX=0A09H,最高位进位CF=1,低8位1的;个数为偶数PF=1;D3向D4进位AF=1 MOV CX, 0FF00H ;CX←0FF00HADC AX, CX ;AX=090AH,最高位进位CF=1,低8位1的个;数为偶数PF=1SUB AX, AX ;AX=0,运算结果为零ZF=1INC AX ;AX=1HOR CX, 0FFH ;CX=0FFFFH,最高位为1,ZF=1,低8位1的;个数为偶数PF=1AND CX, 0F0FH ;CX=0F0FH,低8位1的个数为偶数PF=1MOV [10H], CX ;[10H]←0F0FH程序段3:MOV BL, 25H ;BL←25HMOV BYTE PTR[10H], 4 ;[10H]←04HMOV AL, [10H] ;AL←04HMUL BL ;AL=94H程序段4:MOV WORD PTR[10H],80H ;[10H]←0080HMOV BL, 4 ;BL←04HMOV AX, [10H] ;AX←0080HDIV BL ;AX=0020H程序段5:MOV AX, 0 ;AX←0000HDEC AX ;AX=0FFFFH,最高位为1,SF=1,低8;位1的个数为偶数PF=1,最高位向前、;D3向D4有借位,CF=1,AF=1 ADD AX, 3FFFH ;AX=3FFEH,D3向D4有进位,AF=1 ADD AX, AX ;AX=7FFCH,低8位1的个数为偶数,PF=1;D3向D4有进位,AF=1NOT AX ;AX=8003HSUB AX, 3 ;AX=8000H,低8位1的个数为偶数,PF=1;最高位为1,SF=1OR AX, 0FBFDH ;AX=0FBFDH,最高位为1,SF=1AND AX, 0AFCFH ;AX=0ABCDH,最高位为1,SF=1SHL AX,1 ;AX=579AH,低8位1的个数为偶数,PF=1,;算数结果溢出OF=1,最高位进位CF=1 RCL AX,1 ;AX=0AF35H,低8位1的个数为偶数,;PF=1,算数结果溢出OF=12.用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。
·1·沈 阳 工 程 学 院学 生 实 验 报 告实验室名称:计算机组成原理实验室 实验课程名称:计算机组成原理 实验项目名称:进位控制实验 实验日期: 20 年 月 日 班级: 姓名: 学号: 指导教师: 批阅教师: 成绩:一.实验目的1.验证带进位控制的算术运算功能发生器(74LS181)的功能。
2.完成加法和减法算术运算,记录结果并分析进位变化情况。
二.实验设备TDN-CM 计算机组成原理教学实验系统一台,排线若干。
三.实验内容1.实验原理进位控制运算器的实验原理如图2-1所示。
图2-1 进位控制实验原理图图中①~④对应的信号名称分别是①( )、②( )、③( )、④( )。
其中AR 为( )电平有效,LDDR1为( )电平有效。
本次实验在前面的算术逻辑运算实验基础上增加了进位控制部分。
当( )为低电平并且( )为正脉冲信号时,本次74LS181运算结果的进位将写入到74LS74锁存器中,并通过( )指示灯显示。
实验时将T4连至“STATE UNIT ”的微动开关KK2上。
2.实验步骤(1)请将图2-2实验接线图中缺少的接线及信号名称补充完整,仔细查无误后,接通电源。
实验二 进位控制实验·2·图2-2 实验接线图(2)用二进制数码开关向DR1和DR2寄存器置数。
请将操作步骤补充完整。
按照实验一中介绍的方法检验DR1和DR2中存的数是否正确,如果不正确需要( )。
如果正确请将SW-B 置为( ),将LDDR1、LDDR2和ALU-B 均设置为( ),以防止( )。
(3)在开始运算之前,如果进位标志指示灯CY 为灭,表示( )。
此时需要将进位标志( ),具体操作方法是将S3、S2、S1、S0、M 、AR 、LDDR1和LDDR2的状态置为( ),然后按动微动开关( )。
若清零时DR1寄存器中的数为FFH ,则会出现( )的情况。
(4)使Cn=( )、AR=( )、ALU-B=( ),S3 S2 S1 S0 M 状态为( ),来验证带进位加法运算及进位锁存功能。
实验二算术运算实验一、实验目的1、掌握MASMforWindows环境下的汇编语言编程环境使用;2、掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;3、掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志位的影响及测试方法;4、掌握无符号数和有符号数运算区别及编程方法;5、掌握BCD码调整指令的使用方法二、软硬件实验环境1、硬件环境:惠普64位一体化计算机及局域网;2、软件环境:windows8,红蜘蛛管理系统,MASMforWindows。
三、实验基本原理算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。
1) 标志位在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。
表1标志名和状态符号的对照表参照表2) 加减法指令ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。
3) 乘除法指令MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。
4) 符号位扩展指令CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。
5) BCD码的调整指令在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。
组合的BCD码加法调整指令DAA;组合的BCD码减法调整指令DAS;非组合的BCD码加法调整指令AAA;非组合的BCD码减法调整指令AAS;乘法的非组合BCD码调整指令AAM;除法的非组合BCD码调整指令AAD。
8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。
表2数据类型的数据运算表四、实验步骤与内容1)对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响:①实验分析本实验要求简单,仅对指定三组数进行基本运算。
实验二实验报告表
实验名称:
学号姓名:班级:实验时间:
实验报告表2-1 数值型数据在计算机中的二进制实验记录表
说明:本实验对计算机内存数据的存放拟定为:①整数用两个字节存储,并负数只考虑原码;②实数用4个字节存储,其中阶码部分占一个字节。
!
实验报告表2-2 其他进制数据与二进制转化实验记录表
实验报告表2-3 数据的原码、补码和反码表示实验记录表
,
实验报告表2-4 二进制算术运算实验记录表
实验报告表2-5溢出实验记录表
|
实验报告表2-6浮点数的小数点浮动实验记录表
实验报考表2-7 表示浮点数的二进制串中阶码位数改变实验记录表。
实验二算术运算类操作实验一、实验目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。
6、掌握BCD 码调整指令的使用方法二、实验内容1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并2、在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。
试编程实现上述运算。
FIRSTDW 45 H,82H,96 H,57H数据分别装入X、Y、Z、V 单元,要求上式计算结果的商存入AX,余数存入DX 寄存器。
同学自行给出初始值加以验证程序。
三、理论基础本实验主要进行算术运算程序设计和调试,涉及到的知识点包括:1.加减法处理指令主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。
2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW 和从字扩展到双字的指令CWD。
3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的BCD 码减法调整指令DAS,非压缩的BCD 码加法调整指令AAA,非压缩的BCD 码减法调整指令AAS,乘法的非压缩BCD码调整指令AAM,除法的非压缩BCD 码调整指令AAD。
四、流程图五、程序代码1、DATAS SEGMENTnum11 dw 087hnum12 dw 034hnum21 dw 0c2hnum22 dw 05fhtemp dw 0tempcx dw 0tab db '0123456789abcdef ' DATAS ENDS STACKS SEGMENTdw 32 dup(0)STACKS ENDS CODES SEGMENT ASSUMECS:CODES,DS:DATAS,SS: STACKSSTART:MOV AX,DATASMOV DS,AXmov ax,STACKSmov ss,axmov ax,0040hmov sp,axmov temp,101hmov ax,num11mov bx,num12mov dx,0div bx pushf;标志及结果入栈push axmov ax,num11mov bx,num12mul bxpushf;标志及结果入栈push axmov ax,num11mov bx,num12sub ax,bxpushf;标志及结果入栈push axmov ax,num11mov bx,num12add ax,bxpushf;标志及结果入栈push axmov cx,4l:mov tempcx,cxpop tempmov ax,0bbhpop tempmov cx,tempcxloop lmov temp,102hmov ax,num21mov bx,num22mov dx,0div bxpushf;标志及结果入栈push axmov ax,num21mov bx,num22mul bxpushf;标志及结果入栈push axmov ax,num21mov bx,num22sub ax,bxpushf;标志及结果入栈push axmov ax,num21mov bx,num22add ax,bxpushf;标志及结果入栈push axmov cx,4ll: mov tempcx,cxpop tempmov ax,0bbhpop tempmov cx,tempcxloop llCODES ENDSEND START2、DATAS SEGMENTFirst dw45H,82H,96H,57HSecond dw12H,46H,83H,45Hresult dw 2 dup(?) DATAS ENDSSTACKS SEGMENT STACKS ENDSCODES SEGMENTASSUMECS:CODES,DS:DATAS,SS :STACKSSTART:MOV AX,DATASMOV DS,AXlea si,firstadd si,6lea di,secondadd di,6mov cx, 8mov ah,0mov bh,0again:clcdec cxmov al,bladd al,[si]mov bl,[di]adc al,bldaamov bl,0adc bl,0mov bp,cxmov result[bp],axsub si,2sub di,2cmp cx,4jne againMOV AH,4CHINT 21HCODES ENDSEND START3、DA TAS SEGMENTx dw 300y dw 2z dw 333v dw 4temp dw 0tempcx dw 0DA TAS ENDSSTACKS SEGMENTdw 32 dup(0)STACKS ENDS CODES SEGMENT ASSUMECS:CODES,DS:DA TAS,SS: STACKS START:mov AX,DATASmov DS,AXmov ax,STACKSmov ss,axmov ax,0040hmov sp,axmov temp,300hmov temp,328mov ax,xmov bx,yimul bxmov bx,zadd ax,bx ;429jnc skip1inc dxskip1: mov bx,tempsbb ax,bx ;100jnc skip2dec dxskip2: mov bx,vsbb ax,bxjnc skip3 ;21dec dxskip3: mov bx,yidiv bx ;21/20=1 (1)mov ah,4chint 21hCODES ENDSEND START六、实验结果七、实验小结。
实验指导书课程:计算机组成原理实验教师:班级:第一章系统概述1.1 实验系统组成第二章基础模块实验实验一寄存器实验实验目的:熟悉试验仪各部分功能。
掌握寄存器结构、工作原理及其控制方法。
实验内容:利用实验仪开关区上的开关sk23-sk16提供数据,其它开关做为控制信号,将数据通过DBUS写入OUT 寄存器,并将OUT寄存器的内容送往扩展区通过数码管和发光二极管显示。
实验原理:实验箱用74HC273 来构成寄存器。
(1)74HC273的功能如下:(2)实验箱中74HC273的连接方式:(3)实验逻辑框图12、打开实验仪电源,按CON单元的nRST按键,系统复位;如果EXEC键上方指示灯不亮,请按一次EXEC键,点亮指示灯,表示实验仪在运行状态。
3、利用开关和控制信号将数据通过DBUS写入OUT寄存器,并将OUT寄存器的内容送往扩展区通过数码管和发光二极管显示。
并写出将数据5FH写入OUT寄存器的操作过程。
实验二运算器实验实验目的:了解运算器的组成结构;掌握运算器的工作原理和控制方法。
实验内容:利用实验仪提供的运算器,通过开关提供数据信号,将数据写入寄存器A和寄存器B,并用开关控制ALU的运算方式,验证运算器的功能。
实验原理:(1)实验逻辑框图:信号说明:IN0~IN7:ALU数据输入信号ALU_D0~ALU_D7:ALU数据输出信号:寄存器A写信号,低电平有效。
当T1节拍信号到来,该信号有效时,IN0~IN7数据可以写入寄存器A。
:寄存器B写信号,低电平有效。
当T2节拍信号到来,该信号有效时,IN0~IN7数据可以写入寄存器B。
:ALU计算结果读出信号,当T3节拍信号到来,该信号有效时,ALU计算结果送往ALU_D0~ALU_D7。
S3~S0,CN_I:ALU运算控制信号,控制ALU的运算方法。
T1,T2,T3:三个节拍信号,高电平有效,由con区的uSTEP按键控制,在运行状态时,依次按下uSTEP 键会依次发出T1、T2、T3节拍。
实验二算术运算实验一、实验目的1、掌握MASMforWindows环境下的汇编语言编程环境使用;2、掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;3、掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志位的影响及测试方法;4、掌握无符号数和有符号数运算区别及编程方法;5、掌握BCD码调整指令的使用方法二、软硬件实验环境1、硬件环境:惠普64位一体化计算机及局域网;2、软件环境:windows8,红蜘蛛管理系统,MASMforWindows。
三、实验基本原理算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。
1) 标志位在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。
表1标志名和状态符号的对照表参照表2) 加减法指令ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。
3) 乘除法指令MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。
4) 符号位扩展指令CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。
5) BCD码的调整指令在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。
组合的BCD码加法调整指令DAA;组合的BCD码减法调整指令DAS;非组合的BCD码加法调整指令AAA;非组合的BCD码减法调整指令AAS;乘法的非组合BCD码调整指令AAM;除法的非组合BCD码调整指令AAD。
8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。
表2数据类型的数据运算表四、实验步骤与内容1)对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响:①实验分析本实验要求简单,仅对指定三组数进行基本运算。
只需使用ADD、SUB、MUL、DIV四个运算命令,并以MOV命令作为数值转移的手段即可。
运算结果和状态标志的情况可以通过debug调试中的T命令进行逐步查看。
需要注意的主要有以下几点:1.在进行加法和乘法运算时,会出现对高位的进位扩展。
因此,在记录结果的时候不能仅仅记录低2位(十六进制)的结果,应记录包含高位的完整结果;2.在使用MUL和DIV命令时,语句的写法与ADD和SUB有区别;3.除法运算既可得到商,也可得到余数,余数存在DL中;4.查看结果时以三个语句为一次运算,输入三个T命令后的结果才是此次运算的结果。
②流程图③程序样例1、DATAS SEGMENT;此处输入数据段代码BUF1 DB 0ABH,64H,0A2HBUF2 DB 78H,5AH,3FHBUF3 DB 10 DUP(?)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,2Q1:MOV AH,0HMOV AL,BUF1[SI]MOV BL,ALMOV AL,BUF2[SI]ADD AX,BX;进行运算MOV BUF3[SI],ALADD SI,1HDEC CXJNZ Q1 ;跳转再做一次第二组数的加法运算MOV AX,4CHINT 21HCODES ENDSEND START2、STACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,2Q1:MOV AH,0HMOV AL,BUF2[SI]MOV BL,ALMOV AL,BUF1[SI]SUB AX,BXMOV BUF3[SI],ALADD SI,1H ;do the operationDEC CXJNZ Q1 ;do it again with the second group of numbersMOV AX,4CHINT 21HCODES ENDSEND START3、DATAS SEGMENT;此处输入数据段代码BUF1 DB 0ABH,64H,0A2HBUF2 DB 78H,5AH,3FHBUF3 DB 10 DUP(?)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV SI,2MOV CX,1Q1:MOV AH,0HMOV AL,BUF2[SI]MOV BL,ALMOV AL,BUF1[SI]DIV BXMOV BUF3[SI],ALADD SI,1H ;do the operationDEC CXJNZ Q1 ;do it again with the second group of numbersMOV AX,4CHINT 21HCODES ENDSENDSTART④实验结果0ABH+78H64H+5AH0ABH-78H64H-5AH0A2H*3FH0A2H/3FH2) 在数据段定义了两个多精度的有符号16进制数,BUF1和BUF2。
求两数的和与差,并将计算值存放在BUF2为首地址的缓冲区中;同时将两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在BUF2为首地址的缓冲区中。
试编程实现上述运算。
BUF1DB 92H,98H,45H,64H,78HBUF2 DB 33H,46H,17H,45H,52H①实验分析本实验的思想是把这个两个多精度数进行按精度(每两位)进行运算,考虑进位与借位,每种运算都可以使用循环和带进位加法,或循环和带进位减法进行实现。
对于十进制数运算的要求,再辅以DAA和DAS两种十进制调整命令,将结果变为BCD码即可。
本实验中需要注意的有以下几点:1.本实验要求就过存入以BUF2为首地址的缓冲区。
为在运算时保护BUF2的数据,需定义另一个存储空间来存储和BUF2一样的数据;2.在进行不同运算的间隙应当进行清除进位标志的操作,即使用CLC命令,避免上一运算的进位影响下一位运算的结果;3.DAA和DAS都只能对AL里的结果转换为压缩BCD码,因此十进制加减结果必须存入AL里,且转换为压缩BCD码的结果要靠读取AL来获得。
②程序流程图③程序样例1、DATAS SEGMENT;此处输入数据段代码BUF1 DB 92H,98H,45H,64H,78HBUF2 DB 33H,46H,17H,45H,52HBUF3 DB 10 DUP(?)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,4MOV AH,00HQ1:MOV AL,BUF2[SI]MOV BL,ALMOV AL,BUF1[SI]ADC AL,BLMOV BUF2[SI],ALINC SIDEC CXJNZ Q1MOV AX,4CHINT 21HCODES ENDSENDSTART2、DATAS SEGMENT;此处输入数据段代码BUF1 DB 92H,98H,45H,64H,78HBUF2 DB 33H,46H,17H,45H,52HBUF3 DB 10 DUP(?)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,4MOV AH,00HQ1:MOV AL,BUF2[SI]MOV BL,ALMOV AL,BUF1[SI]SBB AL,BLMOV BUF2[SI],ALINC SIDEC CXJNZ Q1MOV AX,4CHINT 21HCODES ENDSENDSTART3、DATAS SEGMENT;此处输入数据段代码BUF1 DB 92H,98H,45H,64H,78HBUF2 DB 33H,46H,17H,45H,52HBUF3 DB 10 DUP(?)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,4MOV AH,00HQ1:MOV AL,BUF2[SI]MOV BL,ALMOV AL,BUF1[SI]ADC AL,BLDAAMOV BUF2[SI],ALDEC CXJNZ Q1MOV AX,4CHINT 21HCODES ENDSENDSTART4、DATAS SEGMENT;此处输入数据段代码BUF1 DB 92H,98H,45H,64H,78HBUF2 DB 33H,46H,17H,45H,52HBUF3 DB 10 DUP(?)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV SI,0MOV CX,4MOV AH,00HQ1:MOV AL,BUF2[SI]MOV BL,ALMOV AL,BUF1[SI]SBB AL,BLDAAMOV BUF2[SI],ALINC SIDEC CXJNZ Q1MOV AX,4CHINT 21HCODES ENDS④实验结果3) 编程计算280*584/190,运算结果用十六进制表示。
要求上式计算结果的商存入AX,余数存入DX寄存器。
①实验分析本实验要求很简单,可用基本运算直接完成。
值得注意的就是最后进行除法运算时,DIV命令的执行结果自动将商存在AX中,余数存于DX中,可直接满足实验要求,故无需多余操作。