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