北京理工大学汇编实验报告2.docx

上传人:b****8 文档编号:24030187 上传时间:2023-05-23 格式:DOCX 页数:23 大小:46.16KB
下载 相关 举报
北京理工大学汇编实验报告2.docx_第1页
第1页 / 共23页
北京理工大学汇编实验报告2.docx_第2页
第2页 / 共23页
北京理工大学汇编实验报告2.docx_第3页
第3页 / 共23页
北京理工大学汇编实验报告2.docx_第4页
第4页 / 共23页
北京理工大学汇编实验报告2.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

北京理工大学汇编实验报告2.docx

《北京理工大学汇编实验报告2.docx》由会员分享,可在线阅读,更多相关《北京理工大学汇编实验报告2.docx(23页珍藏版)》请在冰豆网上搜索。

北京理工大学汇编实验报告2.docx

北京理工大学汇编实验报告2

北京理工尢爭

HeijinaInstituteofTechnology

本科实验报告

实验名称:

实验二算术运算实验

课程名称:

课程设计I(CPU与汇编)

(实验)

实验时间:

第5-20周周五下

任课教师:

聂青

实验地点:

10-102

实验教师:

苏京霞

实验类型:

0原理验证□综合设计□自主创新

学生姓名:

罗逸雨

学号

112014120805211401

组号:

3

学院:

信息与电子学院

同组搭档:

专业:

通信工程

成绩:

 

信息与电子学院

SCHOOLOFINFORMATIONANDELECTRONICS

1/1

一、实验目的

1)掌握MASMforWindows环境下的汇编语言编程环境使用;

2)掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;

3)掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志位的影响及测试方法;

4)掌握无符号数和有符号数运算区别及编程方法;

二、实验环境与原理

1.实验软硬件环境

1)硬件环境:

惠普64位一体化计算机及局域网;

2)软件环境:

Windows8,红蜘蛛管理系统,MASMforWindowso

2.实验原理

算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。

1)标志位

在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。

表1标志名和状态符号的对照表参照表

标志名

置位

复位

溢出标志OF(是/否)

0V

NV

方向标志DF(减/増)

DN

UP

中断标志IF(允许/禁止)

EI

DI

符号标志SF(负/正)

NG

PL

零标志ZF(是/否)

ZR

NZ

辅助进位标志AF(是/否)

AC

NA

PE

PO

进位标志CF(是/否)

CY

NC

2)加减法指令

ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。

3)乘除法指令

MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。

4)符号位扩展指令

CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。

1/1

5)BCD码的调整指令

在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。

组合的BCD码加法调整指令DAA;

组合的BCD码减法调整指令DAS;

非组合的BCD码加法调整指令AAA;

非组合的BCD码减法调整指令AAS;乘法的非组合BCD码调整指令AAM;除法的非组合BCD码调整指令AADo

8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。

表2表数据类型的数据运算表

数制

二进制

BCD码

带符号

无符号

组合

非组合

运算符

+、一、

X、-T

+、一

卜、一、X、4"

操作数

字节、字、多精度

.1.二位数字)

三、实验步骤

1)试编程以下各组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:

计算

状态标志

算式

结果

AF

ZF

OF

SF

PF

0ABH+78H

OABH-78H

64H+5AH

64H-5AH

0A2H*3FH

0A2H3FH

总结各运算对状态标志位的影响,及其意义匚

2)在数据段定义了两个多精度的有符号16进制数,BUF1和BUF2o求两数的和与差,并将计算值存放在BUF3为首地址的缓冲区中;同时将两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在BUF3为首地址的缓冲区中。

试编程实现上述运算。

1/1

BUF1DB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

16进制结果

10进制结果

BUF1-BUF2

BUF1-BUF2

3)编程计算283584/190,运算结果用十六进制表示。

要求上式讣算结果的商存入AX,余数存入DX寄存器。

四、程序清单与框图

(1)程序:

CODESSEGMENT

ASSUMECS:

CODES

START:

MOVAX,OABH

MOVBX,78H

ADDAX,BX;0ABH+078H

MOVAX,OABH

MOVBX,78H

SUBAX,BX;0ABH-078H

MOVAX,61H

ADDAX,5AH;61H+5AH

MOVAX,64H

SUBAX,5AH;61H-5AH

MOVAL,0A2H

MOVBL,3FH

MULBL;0A2H*3FH

MOVAX,0A2H

MOVBL,3FH

DIVBL;0A2H/3FH

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

1/1

(2)

程序:

1.十六进制求和

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

BUF3DB6DUP(?

);最高位符号位扩展后占一个字,共6个字节

ADWOH

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC;进位清空

MOVCX,4

L:

MOVAL,[SI]

ADCAL,[DI]

MOV[BX],AL

INCSI

INCDI

INCBX;BX自增,指向下一个字节单元

DECCX

JNZL

MOVAL,byteptr[SIj

CBW;符号扩展

MOVDX,AX

MOVAL,byteptr[DI]

CBW;符号扩展

ADCAX,DX

MOVwordptr[BX],AX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

1/1

框图:

开始

程序功能:

通过循环分别求得BUF1、BUF2中低四位字节的和,并存在BUF3对应字节单元中。

值得注意的是有符号数相加时需要对最高位字节先进行符号扩展,所以BUF1、BUF2的高位字节的和需要放在循环外单独计算,最后将高位单元的字型的和存储在BUF3中。

十六进制减法程序同理。

组合BCD码加减法在最后需要进行DAA/DAS调整。

1/1

2.十六进制作差

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

BUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC

MOVCX,4

L:

MOVAL,[SI]

SBBAL,[DI]

MOV[BX],AL

INCSI

INCDI

INCBX

DECCX

JNZL

MOVAL,byteptr[Sl]

CBW;符号扩展

MOVDX,AX

MOVAL,byteptr[DI]

CBW;符号扩展

SBBDX,AX

MOVwordptr[BX],DX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

3.十进制求和

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

BUF3DB6DUP(?

DATASENDS

CODESSEGMENT

1/1

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC

MOVCX,5

L:

MOVAL,[SI]

ADCAL,[DI]

DAA

MOV[BX],AL

INCDI

INCSI

INCBX

DECCX

JNZL

MOVAL,0

ADCAL,0;存最高位进位

DAA

MOVbyteptr[BX],AL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

4.十进制作差

DATASSEGMENT

BUF1DB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

BUF3DB6DUP(?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

LEABX,BUF3

CLC

MOVCX,5

1/1

L:

MOVAL,[SI]

SBBAL,[DI]

DAS

MOV[BX],AL

INCDI

INCSI

INCBX

DECCX

JNZL

MOVAL,0

SBBAL,0

DAS

MOVbyteptr[BX],AL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

(3)

程序:

CODESSEGMENT

ASSUMECS:

CODES

MOVAX,280

MOVBX,584

MULBX

MOVBX,190

DIVBX

MOVAH,4CH

INT21H

CODESENDS

END

五、实验结果与分析

(1)

计算

状态标志

算式

结果

AF

CF

ZF

OF

SF

PF

0ABH+78H

123H

AC

NC

NZ

NV

PL

PO

0ABH-78H

33H

NA

NC

NZ

NV

PL

PE

64H+5AH

BEH

NA

NC

NZ

NV

PL

PE

64H-5AH

0AH

AC

NC

NZ

NV

PL

PE

0A2H*3FH

27DE

AC

CY

NZ

ov

PL

PE

0A2H/3FH

商02余数42

AC

CY

NZ

ov

PL

PE

1/1

无符号数运算标志位意义总结:

状态标志位

加法

减法

乘法

除法

0

1

0

1

0

1

0

1

CF

最高位无进位

最高位有进位

最高位无借位

最高位有借位

CF=OF=O

乘积的高一半为0(字节操作的(AH)或字操作的

(DX))

CF二OF二1乘积的高一半不为0

无定义

AF

低四位向髙四位无进位

低四位向髙四位进位

低四位向髙四位无进位

低四位向髙四位进位

无影响

无影响

ZF

结果不

为0

结果为0

结果不

为0

结果为0

无影响

无影响

OF

无溢岀

两个同符号数相加,结果符号与其相反,发生溢岀。

无溢出

两数符号相反,而结果符号与减数相同,发生溢出。

CF=OF=O乘积的高一半为0(字节操作的(AH)或字操作的

(DX))

CF二OF二1乘积的高一半不为0

SF

最高位

为0

最高位为1

最高位

为0

最髙位

为1

无影响

无影响

PF

1的个数为奇数

1的个数为偶数

1的个数为奇数

1的个数为偶数

无影响

无影响

DEBUG运行结果截图:

0ABH+078H二0123H

AX=01Z3BX=O078

DS=Q?

60ES=O?

60

0770:

0008BGAB

CX=O0Z?

DX=O0OOSP=OO00

SS=076FCS=O?

70IP二0008

MOUAL,AB

1/1

BP=000OSI=00eODI=O00O

NUUPElPLNZACPONC

0ABH-78H二0033H

椒二0033BX=OO78

DS=0?

60ES=O76O

3770:

0010B8640O

CX=G02DDX=OO00SP二QOG0

SS=O76FCS=07?

0IF二003

MOUAX,0064

BP二0000SI二0000DI二0000

MUUPElPLMZMAPEMC

64H+5AH=BEH

X二©QBEBX=O078

S=O760ES=07&0

)770:

0016B8&4O0

CX二O0ZDDX二0000SP=OG0©

SS=076FCS=0?

7OIP=0G16

MOUAX.0064

BP二©000SI二0000DI二000©

MUUPElPLNZNAPENC

64H-5AH=0AH

AX二0O0ABX=O076

DS=0760ES=O760

97?

O:

0O1CB0A2

CX二00ZDDX二000©SF二0000

SS=076FCS=0770IP=0O1C

MOUAL,A2

HP二000©SI二0000DI二000©

MUUPElPLNZACPENC

02AH*3FH二27DE

AX=Z?

DEBX=O03F

DS=0760ES=O?

60

0770:

00ZZB8AZ00

CX=O0ZDDX二0OO0SP二0000

SS=0?

6FCS=O770IF=00ZZ

MDUAX,00AZ

BP=0OOGSI二GOOODI二OOOO

OUUPElFLMZACPECY

0A2H/3FH=商02余数42

 

我二Z40ZBX二003FCX=OOZDDX='DS=0760ES=O76O

3770:

0029B44C

0000SP=O0©0

SS=O76FCS=077OIP=00Z9

rtOUAH,4C

BP二MWSI二0000DI二0000

OUUPElPLNZACPECY

 

(2)

BUF1、BUF2均为有符号数

BUFlDB92H,98H,45H,64H,78H

BUF2DB33H,46H,17H,45H,52H

16进制结果

10进制结果

BUF1+BUF2

C5DE5CA9CA00

254563093101

BUF1-BUF2

5F522EIF2600

595228192600

经过计算验证,运行结果均正确。

DEBUG运行结果截图:

1•十六进制数求和

-dds:

0

0770:

0000

0770:

0010

0770:

0020

0770:

0030

0770:

0040

0770:

0050

0770:

0060

0770:

0070

WWHLJDWWW9»D34»)0)0

)7»)0)0E»石69»»»D00400005)0E)?

Z»)O)OC0(3OC0(0(0(5»»万8»»)04*0009000?

-»-』2-)5-)0-)0-)0-100100006064A0004&

3a8OD0(0(0(8»8J0B»»)04«ek8«««608090005)o)79)4»)o)o4O0DOOOO8»OOA»)O)O9O7F8OOO9OBaFZ0(0(

・・Edx3F・ER・・\・・・

・p・・・・6・・・>

FGCIu

2.十六进制数作差

1/1

0770:

0000

92

98

45

64

?

833

4617-45

52

5F

52

ZE

IF

Z6

0G

0770:

0010

B8

70

07

8E

D88D

3600-00

8D

3E

05

00

8D

IE

0A

0770:

0020

00

F8

B9

04

008A

041A-05

88

G?

46

4?

43

49

75

0770:

0030

F4

8A

04

98

8BDO

8A05-98

IB

DO

89

17

B4

4C

CD

0?

?

0:

0O4O

Z1

00

00

00

0000

0000-00

00

GO

00

00

00

00

00

0?

?

0:

005O

00

00

00

00

0000

0000-00

00

GO

00

00

00

00

00

0?

?

0:

0060

00

00

00

00

0000

0000-00

00

GO

00

00

00

00

00

0?

?

0:

0O70

00

00

00

00

0000

0000-00

00

GO

00

00

00

00

00

-dds:

O

・・Edx3F・ER_R・・&・

・p・・・・6・・・>

FGCIu

L.

3.十进制求和

-dds:

O

0?

7O:

OOGO

98

45

78

33

46

l?

-45

0770:

0010

7007

D8

8D

36

00-00

0770:

0020

F8

B9

00

8A

05

12-04

0?

?

0:

0030

F3

BO

14

0027

8807

0770:

0040

00

00

00

00

00

00-00

0770:

0050

00

00

00

00

00

00-00

O?

?

O:

006O

00

00

00

00

00

00-00

0770:

0070

00

00

00

00

00

00-00

52

25

63

09

31

01

・.Edx3F.ERzEc.l.

8D

3E

00

8D

IE

OA

・U・・・.6・・・>・

27

88

47

46

43

49

GFCI

B4

4C

21

00

00

00

u9...L.

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

OO

00

00

00

00

00

00

00

 

4.十进制作差

…Edx3F.ERYR(.&・

・p・・・・6•…〉

/..GFC1u/・・・L・?

•…

»於刁»)0)0)0)0CDCD今CDCDooo261E幻00000000009Db)0)0)0)0)01840(0(o(0(o(2aqz0(o(0(o(5&0cao(0(0(9ESC»)O)0)053CO40I0I0I0IZDF4»)O)O)O58ZBa0(0(0(5»)5)7)0)o)o)o4ACDoCDCDoCDCD66HF«)O)O)O430z0(o(0(0(388o(o(o(0(0(88»c»»««7DO1OOOO4Efo»)0)0)0)0680000005)?

yo)o)0)o)o4OBB0(O(0(O(97FFOOOOZ8)o5)o)0)o)o

-dds:

O0779:

00000779:

00100779:

OOZO0770:

00300770:

00400770:

00500770:

00600770:

0070

 

(3)280*584/190商:

035CH余数:

0078H

DEBUG运行结果截图:

ftX=Q35CBX=GOBECX=OO11DX=OO?

8SP=OQGODS=Q760ES=G760SS=0?

BFCS=O?

?

GIP=OQGDD?

?

O:

Q00DB44CMOU

BP=GO0O

SI=O0O0DI=O0OG

OUUPElPLNZNAPOCY

AH.4C

AX=035C,DX二0078经验算后证明结果正确。

六、实验感想

经过本次实验,我对汇编语言中的二进制、十六进制、十进制、BCD码的表示形式有了一定了解,对有关BCD码调整指令方面的知识有了更深刻的认识,熟悉了二进制多字节加减法基本指令的使用方法以及无符号数和有符号数乘法和除法指令的使用,通过分析和思考,掌握了各类运算类指令对各状态标志位的影响和测试方法,以及无符号数和有符号数运算区别及编程方法。

在编第二小题的程序时,开始时我忽略了给出的有符号数这个条件,使用了无符号数的方法进行编程,后来老师指出了这个问题。

经过更正这个错误,尝试了无符号数和有符号数的不同的编程方式,我对无符号数和有符号数运算的区别及编程方法有了更加深刻的认识。

在课堂上学的知识只给我留下了较浅的印象,只有通过自己动手编程才能有效巩固所学的知识。

1/1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1