编考 实验 题实验二_第1页
编考 实验 题实验二_第2页
编考 实验 题实验二_第3页
编考 实验 题实验二_第4页
编考 实验 题实验二_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编实验二姓名:康杰靓学号:1120111262班级:05211101专业:通信工程实验二算术运算类操作实验姓名:康杰靓学号:1120111262班级:05211101专业:通信工程一、实验要求和目的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、对于两组无符号数,087H和034H,0C2H和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。2、在数据段定义了两个多精度的有符号16进制数,FIRST和SECOND,1)求两数的和与差,并将结果存放在THIRD为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH为首地址的缓冲区中。试编程实现上述运算。FIRSTDW45H,82H,96H,57HSECONDDW12H,46H,83H,45H3、编程计算((Z+X*Y-328)-V)/Y,其中X、Y、Z、V均为16位带符号数,假设初始数据分别装入X、Y、Z、V单元,要求上式计算结果的商存入AX,余数存入DX寄存器。同学自行给出初始值加以验证程序。五、实验过程及结果分析实验1:为两组数据的四则运算,需要注意的是运算过程中可能出现的进位、借位以及溢出等情况,并且不同的运算对各个状态标志也有不同影响。流程图如下: START取值运算+,-,*,/ END程序代码如下:(1)087H和034H的四种运算加法:DATASSEGMENTdata1dw087Hdata2dw034HDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1MOVBX,data2ADDAX,BXMOVAH,4CHINT21HCODESENDSENDSTART减法:DATASSEGMENTdata1dw087Hdata2dw034HDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1SUBAX,data2MOVAH,4CHINT21HCODESENDSENDSTART乘法:DATASSEGMENTdata1dw087Hdata2dw034HDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1MOVBX,data2MULBX;需要注意MUL指令后面的操作数不能为立即数,只能是寄存器或内存单元MOVAH,4CHINT21HCODESENDSENDSTART除法:DATASSEGMENTdata1dw087Hdata2dw034HDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1SUBDX,DX;将DX清零MOVBX,data2DIVBX;DIV指令的操作数也不能为立即数,商存放在寄存器AX中,余数放在寄存器DX中MOVAH,4CHINT21HCODESENDSENDSTART(2)0C2H和5FH的四种运算加法:DATASSEGMENTdata1dw0C2Hdata2dw5FHDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1ADDAX,data2MOVAH,4CHINT21HCODESENDSENDSTART减法:DATASSEGMENTdata1dw0C2Hdata2dw5FHDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1SUBAX,data2MOVAH,4CHINT21HCODESENDSENDSTART乘法:DATASSEGMENTdata1dw0C2Hdata2dw5FHDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1MOVBX,data2MULBXMOVAH,4CHINT21HCODESENDSENDSTART除法:DATASSEGMENTdata1dw0C2Hdata2dw5FHDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVAX,data1SUBDX,DXMOVBX,data2DIVBXMOVAH,4CHINT21HCODESENDSENDSTART 计算结果以及以及对各个状态标志的影响见下表:计算状态标志表达式结果CFAFZFOFSFPF087H+034H0BBH000001087H-034H53H000001087H*034H1B6C000001087H/034H商2H余1F0010010C2H+5FH121H0100010C2H-5FH63H0100010C2H*5FH47FE0000000C2H/5FH商2H余4H001001各运算对状态标志的影响及意义:状态标志加法减法乘法除法01010101CF最高有效位向高位无进位最高有效位向高位有进位二进制减法运算中最高有效为向高位无借位(被减数大于等于减数,够减的情况)二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)乘积的高半部分为0(字节型乘法的AH),则CF=0,OF=0

乘积的高半部分不为0,则CF=1,OF=1AF低四位对高位无进位低四位对高位有进位低四位对高位无借位低四位对高位有有借位不确定不确定不确定ZF结果不为零结果为零结果不为零结果为零不确定不确定OF两个不同符号数相加,或同符号数相加,结果符号与其相同两个同符号数相加(正数+正数或负数+负数),结果符号与其相反。同符号数相减时,或不同符号数相减,其结果符号与减数不同。两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。乘积的高半部分为0(字节型乘法的AH),则CF=0,OF=0

乘积的高半部分不为0,则CF=1,OF=1SF结果不为负结果为负结果不为负结果为负不确定不确定PF运算结果低八位含1的个数是奇数运算结果低八位含1的个数是偶数运算结果低八位含1的个数是奇数运算结果低八位含1的个数是偶数不确定不确定实验2:先是十六进制的加减法,用SI指向当前运算的字节,然后从低位到高位逐个字节进行加减运算,注意有进位时使用ADC/SBB,缓冲区应多预留以为作为进位,之后利用循环,将每组数据分别相加减,最后调整最高位进位放在THIRD的最高位。十进制的加减法,需要把十六进制数的结果作调整,用到的是压缩的BCD码的调整指令DAA和DAS,才能得到正确的结果。流程图如下: START 取值 CX=3 每个字节进行相应的运算 N CX=0? Y调整最高位进/借位 END程序源代码:(1)十六进制加法:DATASSEGMENTFIRSTDB45H,82H,96H,57HSECONDDB12H,46H,83H,45HTHIRDDB5DUP(0);定义一个5个字节的缓冲区,最高位放置进位位DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,3;SI的初值设为3,表示指向最低位的字节MOVAL,FIRST[SI]ADDAL,SECOND[SI]MOV[THIRD+1][SI],AL;THIRD+1表示空出最高位作为进位位MOVCX,3next:;循环对每个字节相加DECSIMOVAL,FIRST[SI]ADCAL,SECOND[SI]MOV[THIRD+1][SI],ALloopnextMOVAL,0ADCAL,0MOV[THIRD][SI],AL;以上三步目的是调整最高位进位MOVAH,4CHINT21HCODESENDSENDSTART(2)十六进制减法:DATASSEGMENTFIRSTDB45H,82H,96H,57HSECONDDB12H,46H,83H,45HTHIRDDB5DUP(0)DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,3MOVAL,FIRST[SI]SUBAL,SECOND[SI]MOV[THIRD+1][SI],ALMOVCX,3next:DECSIMOVAL,FIRST[SI]SBBAL,SECOND[SI]MOV[THIRD+1][SI],ALloopnextMOVAL,0SBBAL,0MOV[THIRD][SI],ALMOVAH,4CHINT21HCODESENDSENDSTART(3)十进制加法:DATASSEGMENTFIRSTDB45H,82H,96H,57HSECONDDB12H,46H,83H,45HFORTHDB5DUP(0)DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,3MOVAL,FIRST[SI]ADDAL,SECOND[SI]DAA;压缩的BCD码调整指令MOV[FORTH+1][SI],ALMOVCX,3next:DECSIMOVAL,FIRST[SI]ADCAL,SECOND[SI]DAAMOV[FORTH+1][SI],ALloopnextMOVAL,0ADCAL,0DAAMOV[FORTH][SI],ALMOVAH,4CHINT21HCODESENDSENDSTART(4)十进制减法:DATASSEGMENTFIRSTDB45H,82H,96H,57HSECONDDB12H,46H,83H,45HFORTHDB5DUP(0)DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,3MOVAL,FIRST[SI]SUBAL,SECOND[SI]DASMOV[FORTH+1][SI],ALMOVCX,3next:DECSIMOVAL,FIRST[SI]SBBAL,SECOND[SI]DASMOV[FORTH+1][SI],ALloopnextMOVAL,0SBBAL,0DASMOV[FORTH][SI],ALMOVAH,4CHINT21HCODESENDSENDSTART实验结果:16进制结果10进制结果FIRST+SECOND57,C9,19,9C58,29,80,02FIRST-SECOND33,3C,13,1233,36,13,12实验三:题目要求用十六位带符号数,故使用字类型,并且乘法和除法都要用带符号数的乘除IMUL和IDIV,先计算乘法,然后将乘积高位存在DX中,低位存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论