《北京理工大学实验二报告.docx》由会员分享,可在线阅读,更多相关《北京理工大学实验二报告.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本科实验报告实验名称: 算术运算类操作实验 课程名称:CPU与汇编实验实验时间:2015.10.29任课教师:王耀威实验地点:10-102实验教师:潘丽敏实验类型: 原理验证 综合设计 自主创新学生姓名:王晓玥学号/班级:1120131332/05111311组 号:学 院:信息与电子学院同组搭档:专 业:信息工程成 绩:一、实验要求和目的 1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 2、掌握各类运算类指令对各状态标志位的影响及测试方法; 3、熟悉汇编语言二进制多字节加减法基本指令的使用方法; 4、熟悉无符号数和有符号数乘法和除法指令的使用; 5、掌握符号位扩展指令的
2、使用。 6、掌握 BCD 码调整指令的使用方法 二、软硬件环境 1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 1、加减法处理指令 主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。 2乘除法指令和符号位扩展指令 主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。 3BCD 码的调整指令 主要有非压缩的 BCD 码加法调整指令 DAA,压缩的 B
3、CD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。 8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令, 可对表 1 所示的数据类型进行数据运算。 表 1-2-1 数据类型数据运算表数制二进制BCD码带符号无符号组合非组合运算符、操作数字节、字、多精度字节(二位数字)字节(一位数字)四、实验内容与步骤 1、对于两组无符号数,087H 和 034H,0C2H 和 5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标
4、志位的影响: (1)实验流程将一组操作数存入内存分别用ADD,SUB,MUL,DIV对两数进加减乘除,并把结果存入内存,进行除法运算时商和余数单独储存运算结束(2)实验代码:DATAS SEGMENT BUF1 DB 087H BUF2 DB 034H BUF3 DB 4 DUP(?);此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV AX,0 MOV SI,AX ;两数
5、相加 MOV AL,BUF1 MOV BL,BUF2 ADD AL,BL MOV BUF3SI,AL MOV AL,0 MOV AL,0 INC SI MOV BUF3SI,AL ;两数相减 MOV AL,BUF1 MOV BL,BUF2 SUB AL,BL INC SI MOV BUF3SI,AL MOV AL,0 SBB AL,0 INC SI MOV BUF3SI,AL ;两数相乘 MOV AL,BUF1 MOV BL,BUF2 MUL BL INC SI MOV BUF3SI,AL INC SI MOV BUF3SI,AH ;两数相除,AL中存放商,AH中存放余数 MOV AX,0 M
6、OV AL,BUF1 MOV BL,BUF2 DIV BL INC SI MOV BUF3SI,AL INC SI MOV BUF3SI,AH ;此处输入代码段代码 MOV AH,4CH INT 21HCODES ENDS END START(3)实验结果: 1)第一组操作数87H,34H 2)第二组操作数0C2H,5FH(4)计算结果计算状态标志表达式结果CFAFZFOFSFPF087H+034H00BB000011087H-034H0053000101087H*034H1B6C100100087H/084H02(1F)1000010C2H+05FH01210000000C2H-O5FH00
7、630010010C2H*05FH47FE0000010C2H/05FH02(04)000000(5)各运算对状态标志位的影响及其意义。 状态标志位加法减法乘法除法CF最高有效位向高位有进位为1,否则为0最高有效位向高位有借位为1,否则为0CF OF=0,乘积的高一半为0(字节操作的AH或字操作的DX);CF OF=1,乘积的高一半不为0不确定AF无影响ZF运算结果非0,ZF=0,否则为1无影响OF两个不同符号数相加,或同符号数相加,结果符号与其相同,则为0;同符号数相加,结果符号与其相反,则为1同符号数相减,或不同符号数相减时结果符号与减数不同,则为0;两数符号相反,结果符号与减数相同,则为
8、1CF OF=0,乘积的高一半为0(字节操作的AH或字操作的DX);CF OF=1,乘积的高一半不为0SF结果不为负则为0;否则为1无影响PF无影响2、在数据段定义了两个多精度的有符号 16 进制数,FIRST 和 SECOND ,1)求两数的和与差,并将结果存放在 THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在 FORTH 为首地址的缓冲区中。试编程实现上述运算。 FIRST DB 45 H,82H,96 H,57H SECOND DB 12 H,46H,83 H,45H (1)程序流程图将两组数字存入内存用ADC从最低位对操作数进
9、行相加,结果存入THIRD中是否加到最高位 否 是上次运算是否有进位调整 是 否相加结束,进行相减循环进行十进制运算,结果存入FORTH中结束(2)程序代码:DATAS SEGMENT FIRST DB 45H,82H,96H,57H SECOND DB 12H,46H,83H,45H THIRD DB 8 DUP(?) FORTH DB 8 DUP(?) DATAS ENDS STACKS SEGMENTSTACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AXMOV A
10、X,0 MOV BX,4MOV CX,4L: MOV AL,BX+3ADC AL,BX-1MOV BX+7,ALDEC BXLOOP LMOV BX,4MOV CX,4M: MOV AL,BX-1 SBB AL,BX+3MOV BX+11,AL DEC BX LOOP M MOV BX,4 MOV CX,4N: MOV AL,BX+3 ADC AL,BX-1DAAMOV BX+15,ALDEC BXLOOP NMOV BX,4MOV CX,4O: MOV AL,BX-1SBB AL,BX+3DASMOV BX+19,ALDEC BXLOOP O MOV AH,4CH INT 21H CODES
11、 ENDS END START (3)运行结果16 进制结果10 进制结果FIRST +SECOND57 C9 19 9C58 29 80 02FIRST -SECOND33 3C 13 1233 36 13 123、编程计算((Z +X*Y -328) -V)/ Y,其中 X、Y、Z、V 均为 16 位带符号数,假设初始数据分别装入 X、Y、Z、V 单元,要求上式计算结果的商存入 AX,余数存入 DX 寄存器。同学自行给出初始值加以验证程序。 (1)流程图及代码DATAS SEGMENT X DW 0D9H Y DW 05CH Z DW 22H V DW 33H result DW 2 DU
12、P(?);此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV AX,X IMUL Y MOV BX,AX MOV CX,DX MOV AX,Z CWD ADD BX,AX ADC CX,DX SUB BX,328 SBB CX,0 MOV AX,V CWD SUB BX,AX SBB CX,DX MOV AX,BX MOV DX,CX IDIV Y MOV RESULT,AX MOV RESULT+2,DX;此处输入代码段代码 MOV AH,4CH INT 21HCODES ENDSEND START(2)运行结果运算结果为AX=00D5H,DX=0017H,经验证,结果正确