汇编语言实验报告2算术运算类操作实验

更新时间:2023-10-16 06:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

一、实验要求和目的

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 所示的 数据类型进行数据运算。 二进制BCD码 数制

带符号无符号组合非组合

运算符+、-、×、÷+、-+、-、×、÷

操作数字节、字、多精度字节(二位数字)字节(一位数字) 表1 数据类型数据运算表

各指令的格式、功能及其对标志位的影响等细节知识,请同学们查阅相关书籍,这里不 再赘述。

四、实验内容与步骤

1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考 虑计算结果对标志寄存器中状态标志位的影响: 计算状态标志 ·源代码如下: DATAS SEGMENT num1dw 087h

num2dw 034h num3dw 0c2h num4dw 5Fh

result1dw 4 dup(?) result2dw 4 dup(?)

;此处输入数据段代码 DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码 STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

mov bx,num2 mov ax,num1 addax,bx

mov result1[0],ax mov ax,num1 subax,bx

mov result1[2],ax mov ax,num1 mulbx

mov result1[4],ax mov ax,num1 divbx

mov result1[6],ax mov bx,num4 mov ax,num3 addax,bx

mov result2[0],ax mov ax,num3 subax,bx

mov result2[2],ax mov ax,num3 mulbx

mov result2[4],ax mov ax,num3 divbx

mov result2[6],ax

mov AH,4CH INT 21H CODES ENDS END START ·运行结果如下:

计算 表达式 结果 087h+034h 00bb 087h-034h 0053 087h*034h 1b6c 087h/034h 0002 0c2h+5fh 0c2h-5fh 0c2h*5fh 0c2h/5fh 0121 0063 47fe 0247 状态标志 cf 0 0 0 0 0 0 0 0 af 1 0 0 0 1 1 1 1 zf 0 0 0 0 0 0 0 0 of 0 0 0 0 0 0 0 0 sf 0 0 0 0 0 0 0 0 pf 1 0 1 1 1 1 1 1 总结各运算对状态标志位的影响,及其意义。 2、在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和 与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据 来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。试编程实现 上述运算。

FIRST DW 45 H,82H,96 H,57H SECOND DW 12 H,46H,83 H,45H 16进制结果10进制结果 FIRST +SECOND FIRST –SECOND 源代码如下:

DATAS SEGMENT

first db 45h,82h,96h,57h seconddb 12h,46h,83h,45h

thirddb 8 dup(?)

forthdb 8 dup(?);此处输入数据段代码 DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX mov cx,4 mov si,0

l1: moval,first[si] movbl,second[si] addal,bl

mov third[si],al moval,first[si] subal,bl

mov third[si+4],al incsi loop l1 mov cx,4 mov si,0

l2: moval,first[si] movbl,second[si] addal,bl daa

mov forth[si],al moval,first[si] subal,bl das

mov forth[si+4],al incsi

loop l2 ;此处输入代码段代码 MOV AH,4CH INT 21H CODES ENDS

END START ·结果如下:

前8个数据是first和second数组,后面紧接着8个数是first与second相加和想减的16进制结果,为57,c8,19,9c,33,3c,13,12;再接下来是10进制结果,为57,28,79,82,33,36,13,12

3、编程计算((Z +X*Y -328) -V)/ Y,其中X、Y、Z、V 均为16 位带符号数,假设初始数 据分别装入X、Y、Z、V 单元,要求上式计算结果的商存入AX,余数存入DX 寄存器。

·流程图: 将y的数值存入dx 将x的数值存入ax

将bx加给ax

将ax减去328

将z的数值存入bx,并将bx加给ax

将v的数值存入bx,ax减去bx 将y的数值存入bx 将ax除以bx得出结果 ·源代码如下: DATAS SEGMENT xdw 3fh ydw 0ffh zdw 2

v dw 34;此处输入数据段代码 DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX movbx,y movax,x imulbx sub ax,328 movbx,z addax,bx movbx,v subax,bx movbx,y idivbx

MOV AH,4CH INT 21H CODES ENDS

END START ·结果如下:

Ax=4c3d,dx=0096

本文来源:https://www.bwwdw.com/article/q5df.html

微信扫码分享

《汇编语言实验报告2算术运算类操作实验.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top