tceic.com
学霸学习网 这下你爽了
相关标签
当前位置:首页 >> 计算机软件及应用 >>

实验二 算术运算类操作实验 (基础与设计)


实验二 算术运算类操作实验 (基础与设计)
一、实验要求和目的
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 指令系统提供了实现加、减、乘、除运算的上述基本指令, 可对下表所示的数 据类型进行数据运算。 数制 运算符 操作数 二进制 带符号 无符号 组合 +、- +、-、×、÷ 字节、字、多精度 BCD码 非组合 +、-、×、÷

字节(二位数字) 字节(一位数字)

四、实验内容与步骤
1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考 虑计算结果对标志寄存器中状态标志位的影响。 设计流程:

运算数偏移量 SI=0 结果数偏移量 BX=0

JIA[BX]=ARRAY[SI]+ARRAY[SI+2] JIAN[BX]=ARRAY[SI]-ARRAY[SI+2] CHENG[BX]=ARRAY[SI]*ARRAY[SI+2] CHU[BX]=ARRAY[SI]/ARRAY[SI+2]

SI+4, BX+2

BX=2 否 是 结束

源代码:

DATAS SEGMENT ARRAY DW 087H,034H,0C2H,05FH JIA DW 2 DUP(?) JIAN DW 2 DUP(?) CHENG DW 2 DUP(?) CHU DW 2 DUP(?) DATAS ENDS ;储存两组加法结果 ;储存两组减法结果 ;储存两组乘法结果 ;储存两组除法结果

STACKS SEGMENT STACKS ENDS

CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV SI,0 MOV BX,0 SUB BX,2 SUB SI,4 L1: ADD SI,4 ADD BX,2 MOV AX,ARRAY[SI] ADD AX,ARRAY[SI+2] MOV JIA[BX],AX MOV AX,ARRAY[SI] SUB AX,ARRAY[SI+2] MOV JIAN[BX],AX MOV AX,ARRAY[SI] MUL ARRAY[SI+2] MOV CHENG[BX],AX MOV AX,ARRAY[SI] ;乘法运算 ;储存乘法结果 ;减法运算 ;储存减法结果 ;第一个运算数 ;加法运算 ;储存加法结果

MOV CX,ARRAY[SI+2] DIV CL MOV CHU[BX],AX CMP BX,2 JNZ L1 ;除法运算 ;储存除法结果

MOV AH,4CH INT 21H CODES ENDS END START
程序结果:

通过-t逐步运行程序,逐步查看每次运算后标志位的状态,结果如下: 计 算 表达式 087H +034H 结果 00BBH CF NC AF NA 状态标志 ZF NZ OF NV SF PL PF PE

087H -034H 087H *034H 087H/034H 0C2H+5FH 0C2H-5FH 0C2H*5FH 0C2H/5FH

0053H 1B6CH 2H 余 1FH 0121H 0063H 47FEH 2H 余 4H

NC NC NC NC NC NC NC

NA NA NA AC AC AC AC

NZ NZ NZ NZ NZ NZ NZ

NV NV NV NV NV NV NV

PL PL PL PL PL PL PL

PE PE PE PE PE PE PE

2、在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和 与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据 来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。试编程实现 上述运算。 FIRST DW 45 H,82H,96 H,57H SECOND DW 12 H,46H,83 H,45H 思路流程: 以十六进制加法为例

偏移量 SI=3,BX=3 计数值 CX=4

THIRD[BX]=FIRST[SI] +SECOND[SI]

SI--,CX--

否 CX-1=0 是 结束 源代码:

DATAS SEGMENT FIRST DB 45H,82H,96H,57H SECOND DB 12H,46H,83H,45H THIRD DB 10 DUP(?)

FORTH DB 10 DUP(?) DATAS ENDS

STACKS SEGMENT

STACKS ENDS

CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;十六加法 MOV SI,3 MOV BX,3 MOV CX,4 INC BX INC SI CLC L1: DEC SI DEC BX ;标志位CF清零 ;运算数据的偏移量 ;储存数据结果的偏移量 ;循环标志量

MOV AL,FIRST[SI] ADC AL,SECOND[SI] MOV THIRD[BX],AL LOOP L1 ;十六减法 MOV SI,3 MOV BX,8 MOV CX,4 INC BX INC SI CLC L2: DEC SI DEC BX MOV AL,FIRST[SI] SBB AL,SECOND[SI] MOV THIRD[BX],AL LOOP L2 ;十加法 MOV SI,3 MOV BX,3 MOV CX,4

INC BX INC SI CLC L3: DEC SI DEC BX MOV AL,FIRST[SI] ADC AL,SECOND[SI] DAA MOV FORTH[BX],AL LOOP L3 ;十减法 MOV SI,3 MOV BX,8 MOV CX,4 INC BX INC SI CLC L4: DEC SI DEC BX MOV AL,FIRST[SI] ;转换为十进制加法

SBB AL,SECOND[SI] DAS MOV FORTH[BX],AL LOOP L4 ;转换为十进制减法

MOV AH,4CH INT 21H CODES ENDS END START
程序结果:

0770:0000 到 0770:0003 是 FIRST 数,0770:0004 到 0770:0007 是 SECOND 数,0770:0008 到 0770:000B 是十六进制加法结果,0770:000D 到 0770:0010 是十六进制减法结果,0770:0012 到 0770:0015 是十进制加法结果,0770:0017 到 0770:001A 是十进制减法结果。 FIRST +SECOND FIRST -SECOND 16 进制结果 57H C9H 19H 9CH 33H 3CH 13H 12H 10 进制结果 58H 29H 80H 02H 33H 36H 13H 12H

3、编程计算((Z +X*Y -328) -V)/ Y,其中X、Y、Z、V 均为16 位带符号数,假设初始数

据分别装入X、Y、Z、V 单元,要求上式计算结果的商存入AX,余数存入DX 寄存器。同 学自行给出初始值加以验证程序。 源代码:

DATAS SEGMENT X DW 200 Y DW 2 Z DW 30 V DW 4 DATAS ENDS ;设X=200 ;设Y=2 ;设Z=30 ;设V=4

STACKS SEGMENT

STACKS ENDS

CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,X MUL Y ADC AX,Z SBB AX,328

SBB AX,V DIV Y MOV AH,4CH INT 21H CODES ENDS END START 程序结果: ;运算结果在AX中

结果在 AX=31H,商为 DX=0

五、心得体会
本次实验主要学习了汇编中四则运算的方法, 并在程序中加以循环实现多组数依次完成 运算。这次实验学习到的最主要的知识就是 DW 和 DB 两种数据在进行运算时候的不同以及 对进位的处理。 在第二个题目中需要涉及到加减乘除四种运算, 为了更好的处理进位就把原 数据由 DW 改为了 DB,这是因为如果用 DW 进位时会将该数的进位加在其 4 位十六进制数 的高两位,而不能加在高位的 DW 中,不方便阅读最终结果。实验中另一个很大的收获就是 有了更深的对标志位的认识。 通过第一个题目认识了不同运算对标志位的影响。 在做第二个 题目时, 由于在循环过程中用了 CMP 改变了标志位导致有些结果总是没有加上下面的进位, 我改进了判断循环的方法避免了改动标志位。 这个经历对我日后的汇编编程是很宝贵的经验。


推荐相关:

实验二 算术运算类操作实验

汇编程序上机实践实验报告实验二 算术运算类操作实验 (基础与设计) 班级:05811101 学号:1120111447 姓名:敬汉丹 实验二 算术运算类操作实验 (基础与设计) 一、实验...


北京理工大学汇编语言实验二 算术运算类操作实验

实验二 算术运算类操作实验(基础与设计) 六、流程图设计 1 开始 2 开始 取值 Cx=4 取值 按制定操作计算, 取得结果 按制定操作带符号计 结果存入栈中 算,...


CPU与汇编实验二实验报告

实验二 算术运算类操作实验(基础与设计)一、 实验目的 1、 了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 2、 掌握各类运算类指令对各状态标志...


理工 汇编语言 实验二

实验二算术运算类操作实验 (基础与设计)一、实验要求和目的 1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 2、掌握各类运算类指令对各状态标...


北理工汇编语言实验报告2

汇编语言实验报告 实验二 算术运算类操作实验 (基础与设计) 班级:05611102 姓名:肖枫 学号:1120111431 实验日期:2013.9.4晚上 实验二 算术运算类操作实验 (基础与...


程序设计基础实验指导书(C++版)

程序设计基础实验指导书(C++版)_工学_高等教育_...掌握 C 语言的基本数据类型、算术运算符、赋值运算...实验设备:计算机; 2. 平台:Windows XP 操作系统,...


实验讲义正文完整_last

实验讲义正文完整_last_司法考试_资格考试/认证_教育专区。目 录 目录......3 第二章 算术运算类操作实验 (基础与设计) ... 17 第三章 字符...


《程序设计基础实验》实验教学大纲

《程序设计基础实验实验教学大纲课程编号:12411107 ...实验(设计)目的;五、实验内容(步骤) ;六、实验...学会使用 C 语言的有关算术运算符,以及包含 这些...


VFP程序设计基础实验指导(实验二)

VFP程序设计基础实验指导(实验二)VFP程序设计基础实验指导(实验二)隐藏>> VFP 程序设计基础实验指导书 (实验二) 【实训 2】运算符与表达式 】 实训目的: 实训目...


实验二 基础资料设置实验操作(学生用)

实验二 基础资料设置操作账套初始化是 ERP 系统中十分重要的工作, 它是整个...系统设置〕~【基础资料】~【公共资料】~【科目】 ,系统弹出会计科目设 置...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com