北理工_汇编_实验二_算术运算类操作实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科实验报告

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

课程名称:CPU与汇编实验实验时间:

任课教师:实验地点:

实验教师:

实验类型:□原理验证■综合设计□自主创新

学生姓名:

学号/班级:组号:无学院:信息与电子同组搭档:无专业:信息工程成绩:

一、实验要求和目的

1.了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;

2.掌握各类运算类指令对各状态标志位的影响及测试方法;

3.熟悉汇编语言二进制多字节加减法基本指令的使用方法;

4.熟悉无符号数和有符号数乘法和除法指令的使用;

5.掌握符号位扩展指令的使用;

6.掌握BCD 码调整指令的使用方法。

二、软硬件环境

1、硬件环境:计算机系统 windows;

2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识

1.加减法处理指令

2.乘除法指令和符号位扩展指令

3.BCD 码的调整指令

四、实验内容

(一)对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:

1.流程图Array

2.程序代码:

DA TAS SEGMENT

DA TAS ENDS

STACKS SEGMENT

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DA TAS,SS:STACKS START:

MOV AX,DATAS

MOV DS,AX

MOV AX,0C2H

MOV BX,5FH

ADD AX,BX ;add

MOV AX,0C2H

MOV BX,5FH

SUB AX,BX ;sub

MOV AX,0C2H

MOV BX,5FH

MUL BX ;mul

MOV AX,0C2H

MOV BX,5FH

DIV BX ;div

MOV AH,4CH

INT 21H

CODES ENDS

END START

(将数据改变得到另一组输出结果)

3.实验结果

以第一组数的加法为例

(已将截图以上输入-t进行debug的步骤省略)

此时右下角信息(NV UP……)代表标志寄存器的值。

4.结果分析:

由资料可得:

1.CF(carry flag):进位标志位,运算结果需要进位为1,不需进位为0

2.PF(parity flag):奇偶标志位,当运算结果的低8位中的“1”的个数为偶数时PF=1,为奇数时,PF=0。

3.AF(auxiliary flag):辅助进位标志,第3位有进位为1,无进位为0

4.ZF(zero flag):零标志位,当运算结果为零时ZF=1,否则ZF=0。

5.SF(sign flag):符号标志位,当运算结果的最高位为1时SF=1,否则SF=0。

6.OF(overflow flag):溢出标志位,当算术运算结果超出了带符号数的范围,即溢出时,OF=1,否则OF=0.

其中注意在本程序中,SUB影响全部的条件标志:

1.减法的CF反应的是无符号数运算中的借位情况:当减数>被减数是CF=1,否则CF=0;

2.OF:如果两个数的符号相反而结果的符号与减数相同,则OF=1,否则OF=0;

3.SF(运算结果<0为1否则为0)、ZF(零标志)、AF(辅助进位标志)、PF(奇偶标志)根据其含义设置。

(二)在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。试编程实现上述运算。

FIRST DW 45H,82H,96H,57H

1.流程图

十六进制减法及十进制显示部分略。

十进制加法前设置寄存器值为SI=0,DI=0,CX=3,在每步相加后用DAA显示为十进制数,十进制加法前设置寄存器值为SI=0,DI=5,CX=3,在每步相减后用DAS显示为十进制数。

2.程序代码:

DA TAS SEGMENT

FIRST DB 45H,82H,96H,57H

SECOND DB 12H,46H,83H,45H

THIRD DB 10 DUP(?) ;注意保证数组空间足够大

FORTH DB 10 DUP(?)

DA TAS ENDS

STACKS SEGMENT

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DA TAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX

MOV SI,0

MOV DI,0

MOV CX,3 ;设置寄存器值,作为计数器

L1: ;十六进制显示加法

MOV AL,FIRST[SI+3]

MOV BL,AL

MOV AL,SECOND[SI+3]

ADC AL,BL

MOV THIRD[DI+4],AL

DEC SI

DEC DI

DEC CX

JNZ L1 ;若CX不为零,则未到最高位,循环

DEC DI ;CX为零,跳出循环

MOV AL,FIRST[SI+3]

CBW ;扩充,符号位存入AH

MOV BX,AX

MOV AL,SECOND[SI+3]

CBW

ADC AX,BX

MOV WORD PTR THIRD[DI+4],AX ;将AX强制显示。即高位存入下一位。

MOV DI,5 ;重置寄存器值,避开加法结果位置。

MOV SI,0

MOV CX,3

L2: ;十六进制显示减法

MOV AL,FIRST[SI+3]

MOV BL,SECOND[SI+3]

SBB AL,BL

相关文档
最新文档