实验二算术运算实验_第1页
实验二算术运算实验_第2页
实验二算术运算实验_第3页
实验二算术运算实验_第4页
实验二算术运算实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

./实验二算术运算实验实验目的掌握掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志;掌握BCD软硬件实验环境1、硬件环境:惠普2、8MASM。三、实验基本原理算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。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>对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响:=1\*GB3①实验分析本实验要求简单,仅对指定三组数进行基本运算。只需使用ADD、SUB、MUL、DIV四个运算命令,并以MOV命令作为数值转移的手段即可。运算结果和状态标志的情况可以通过debug调试中的T命令进行逐步查看。需要注意的主要有以下几点:在进行加法和乘法运算时,会出现对高位的进位扩展。因此,在记录结果的时候不能仅仅记录低2位〔十六进制的结果,应记录包含高位的完整结果;在使用MUL和DIV命令时,语句的写法与ADD和SUB有区别;除法运算既可得到商,也可得到余数,余数存在DL中;查看结果时以三个语句为一次运算,输入三个T命令后的结果才是此次运算的结果。②流程图③程序样例1、DATASSEGMENT;此处输入数据段代码BUF1DB0ABH,64H,0A2HBUF2DB78H,5AH,3FHBUF3DB10DUP<?>DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVSI,0MOVCX,2Q1:MOVAH,0HMOVAL,BUF1[SI]MOVBL,ALMOVAL,BUF2[SI]ADDAX,BX;进行运算MOVBUF3[SI],ALADDSI,1HDECCXJNZQ1;跳转再做一次第二组数的加法运算MOVAX,4CHINT21HCODESENDSENDSTART2、STACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVSI,0MOVCX,2Q1:MOVAH,0HMOVAL,BUF2[SI]MOVBL,ALMOVAL,BUF1[SI]SUBAX,BXMOVBUF3[SI],ALADDSI,1H;dotheoperationDECCXJNZQ1;doitagainwiththesecondgroupofnumbersMOVAX,4CHINT21HCODESENDSENDSTART3、DATASSEGMENT;此处输入数据段代码BUF1DB0ABH,64H,0A2HBUF2DB78H,5AH,3FHBUF3DB10DUP<?>DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVSI,2MOVCX,1Q1:MOVAH,0HMOVAL,BUF2[SI]MOVBL,ALMOVAL,BUF1[SI]DIVBXMOVBUF3[SI],ALADDSI,1H;dotheoperationDECCXJNZQ1;doitagainwiththesecondgroupofnumbersMOVAX,4CHINT21HCODESENDSENDSTART④实验结果0ABH+78H64H+5AH0ABH-78H64H-5AH0A2H*3FH0A2H/3FH计算状态标志算式结果AFCFZFOFSFPF0ABH+78H123H1000000ABH-78H33H00000164H+5AH0BEH00000164H-5AH0AH1000010A2H*3FH27DEH1000010A2H/3FH2H余24H1000012>在数据段定义了两个多精度的有符号16进制数,BUF1和BUF2。求两数的和与差,并将计算值存放在BUF2为首地址的缓冲区中;同时将两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在BUF2为首地址的缓冲区中。试编程实现上述运算。BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52H实验分析本实验的思想是把这个两个多精度数进行按精度〔每两位进行运算,考虑进位与借位,每种运算都可以使用循环和带进位加法,或循环和带进位减法进行实现。对于十进制数运算的要求,再辅以DAA和DAS两种十进制调整命令,将结果变为BCD码即可。本实验中需要注意的有以下几点:本实验要求就过存入以BUF2为首地址的缓冲区。为在运算时保护BUF2的数据,需定义另一个存储空间来存储和BUF2一样的数据;在进行不同运算的间隙应当进行清除进位标志的操作,即使用CLC命令,避免上一运算的进位影响下一位运算的结果;DAA和DAS都只能对AL里的结果转换为压缩BCD码,因此十进制加减结果必须存入AL里,且转换为压缩BCD码的结果要靠读取AL来获得。程序流程图程序样例1、DATASSEGMENT;此处输入数据段代码BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52HBUF3DB10DUP<?>DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVSI,0MOVCX,4MOVAH,00HQ1:MOVAL,BUF2[SI]MOVBL,ALMOVAL,BUF1[SI]ADCAL,BLMOVBUF2[SI],ALINCSIDECCXJNZQ1MOVAX,4CHINT21HCODESENDSENDSTART2、DATASSEGMENT;此处输入数据段代码BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52HBUF3DB10DUP<?>DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVSI,0MOVCX,4MOVAH,00HQ1:MOVAL,BUF2[SI]MOVBL,ALMOVAL,BUF1[SI]SBBAL,BLMOVBUF2[SI],ALINCSIDECCXJNZQ1MOVAX,4CHINT21HCODESENDSENDSTART3、DATASSEGMENT;此处输入数据段代码BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52HBUF3DB10DUP<?>DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVSI,0MOVCX,4MOVAH,00HQ1:MOVAL,BUF2[SI]MOVBL,ALMOVAL,BUF1[SI]ADCAL,BLDAAMOVBUF2[SI],ALINCSIDECCXJNZQ1MOVAX,4CHINT21HCODESENDSENDSTART4、DATASSEGMENT;此处输入数据段代码BUF1DB92H,98H,45H,64H,78HBUF2DB33H,46H,17H,45H,52HBUF3DB10DUP<?>DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVSI,0MOVCX,4MOVAH,00HQ1:MOVAL,BUF2[SI]MOVBL,ALMOVAL,BUF1[SI]SBBAL,BLDAAMOVBUF2[SI],ALINCSIDECCXJNZQ1MOVAX,4CHINT21HCODESENDSENDSTART实验结果十六进制结果十进制结果BUF1+BUF2C5DE5CA9+25456309+BUF1-BUF25F522E1F+65523425+3>编程计算280*584/190,运算结果用十六进制表示。要求上式计算结果的商存入AX,余数存入DX寄存器。=1\*GB3①实验分析本实验要求很简单,可用基本运算直接完成。值得注意的就是最后进行除法运算时,DIV命令的执行结果自动将商存在AX中,余数存于DX中,可直接满足实验要求,故无需多余操作。=2\*GB3②程序流程图实验流程即为从算式最左至最右逐步运算的基本运算律,故流程图略。③程序样例DATASSEGMENTDATASENDSSTACKSSEGMENTSTACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVAX,280MOVBX,584MULBXMOVBX,190DIVBXMOVAH,4CHINT21HCODESENDSENDSTART④实验结果商为AX中的035CH余数为DX

温馨提示

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

评论

0/150

提交评论