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 改变了标志位导致有些结果总是没有加上下面的进位, 我改进了判断循环的方法避免了改动标志位。 这个经历对我日后的汇编编程是很宝贵的经验。



推荐相关:

实验二 算术运算类实验(单片机)

实验二 算术运算类实验(单片机)_数学_自然科学_专业资料。实验二 算术运算类实验 1. 实验目的 加减法的运算 2. 实验内容设计 (1) 五个字节的加法 (2) 五个...


北理工第二章 算数运算类操作实验

北理工第二章 算数运算类操作实验_工学_高等教育_教育专区。实验二一:实验...二、实验涉及的主要知识本实验主要进行算术运算程序设计和调试,涉及到的知识点...


微机实验二 算术逻辑运算及移位操作

实验二 算术逻辑运算及移位操作 一、 实验目的 1.熟悉算术逻辑运算指令和移位...实验心得与体会 在上节课实验基础上,这次的实验比较顺利,感觉到了微机实验的...


计算机组成原理--实验二 算术逻辑运算实验

计算机组成原理--实验二 算术逻辑运算实验_IT/计算机_专业资料。实验二 算术逻辑...4.数据运算过程 (1)在完成数据输入、输出的基础上进行数据运算操作。 (2)从 ...


实验二 运算器实验

实验二 实验二 运算实验 1.算术逻辑运算实验 ....三.实验步骤(1)设计 ALU 元件 在 Quartus II ...二.实验原理在实验(1)的基础上增加进位控制电路,将...


数据结构实验二——算术表达式求值实验报告

数据结构实验二——算术表达式求值实验报告_调查/报告_表格/模板_实用文档。262780706...第 1 页共 33 页 262780706.doc 表达式计算是实现程序设计语言的基本问题之...


实验二 基本算术运算

实验二 基本算术运算 1.实验目的和要求 . 除是数字信号处理中最基本的算 加、减、乘、 除是 数字信号处理中最基本的算 术运算。 中提供了大量的指令来实现...


实验二 带进位控制8位算术逻辑运算实验

2、按指定数据完成几种指定的算术运算。 二、实验内容 1、实验原理 、 带进位控制运算器的实验原理如图所示,在实验(1)的基础上增加进位控 制部分,其中高位 74...


华大-嵌入式-实验2-2

嵌入式系统设计 By xlingo 实验二 运算器组成实验 ---带进位算术运算一.实验目的 1、验证带进位控制的算术运算功能发生器的功能。 2、按指定数据完成几种指定...


实验二 基本算术运算_图文

实验二 算术运算类操作实... 11页 1下载券 实验二 算术运算 9页 2下载券...实验2 算术运算程序设计 暂无评价 3页 免费 汇编实验二 算术运算类操... 10...

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