汇编实验第二次实验报告.docx
《汇编实验第二次实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验第二次实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
汇编实验第二次实验报告
本科实验报告
实验名称:
实验二算术运算类操作实验(基础与设计)
课程名称:
CPU与汇编
实验时间:
任课教师:
实验地点:
实验教师:
实验类型:
□原理验证
□综合设计
□自主创新
学生姓名:
学号/班级:
组号:
学院:
同组搭档:
专业:
成绩:
CPU与汇编实验二实验报告
一、实验目的
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。
四、实验内容与步骤
1、对于两组无符号数,087H和034H,0C2H和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。
编程并运行结果如下表:
对状态标志位的影响小结:
CF为进位标志,运算过程中发生进位(超出AL表示范围)则为CY,否则为NC;
AF为半进位标志,运算过程中某位发生进位,但结果没有超出AL表示范围,则为AC,否则为NA;
ZF为中断标志,这里没有影响;
OF为溢出标志,表示有符号运算时运算是否溢出,溢出为OV,否则为NV;
SF为符号标志,当看成符号数时,如果表示负数,则为NG,否则为PL;
PF为奇偶标志,运算结果二进制中1的个数为奇数时为PO,偶数时为PE。
程序代码如下:
DATASEGMENT
DB87H,34H,0C2H,5FH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,DATA:
[0]
MOVBL,DATA:
[1]
ADDAL,BL
MOVAL,DATA:
[0]
MOVBL,DATA:
[1]
SUBAL,BL
MOVAL,DATA:
[0]
MOVBL,DATA:
[1]
MULBL
MOVAL,DATA:
[0]
MOVBL,DATA:
[1]
DIVBL
MOVAL,DATA:
[2]
MOVBL,DATA:
[3]
ADDAL,BL
MOVAL,DATA:
[2]
MOVBL,DATA:
[3]
SUBAL,BL
MOVAL,DATA:
[2]
MOVBL,DATA:
[3]
MULBL
MOVAL,DATA:
[2]
MOVBL,DATA:
[3]
DIVBL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、在数据段定义了两个多精度的有符号16进制数,FIRST和SECOND,1)求两数的和与差,并将结果存放在THIRD为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH为首地址的缓冲区中。
试编程实现上述运算。
FIRSTDB45H,82H,96H,57H
SECONDDB12H,46H,83H,45H
编程计算得到结果如下表:
程序代码如下:
16进制代码:
datasegment
firstdb45H,82H,96H,57H
seconddb12H,46H,83H,45H
thirddb4dup(?
)
forthdb4dup(?
)
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movsi,3
l1:
leadi,first
adddi,si
moval,[di]
leadi,second
adddi,si
movbl,[di]
adcal,bl
leadi,third
adddi,si
mov[di],al
decsi
cmpsi,-1
jnel1
movsi,3
l2:
leadi,first
adddi,si
moval,[di]
leadi,second
adddi,si
movbl,[di]
sbbal,bl
leadi,forth
adddi,si
mov[di],al
decsi
cmpsi,-1
jnel2
codeends
endstart
10进制代码:
datasegment
firstdb45H,82H,96H,57H
seconddb12H,46H,83H,45H
thirddb4dup(?
)
forthdb4dup(?
)
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movsi,3
l1:
leadi,first
adddi,si
moval,[di]
leadi,second
adddi,si
movbl,[di]
adcal,bl
daa
leadi,third
adddi,si
mov[di],al
decsi
cmpsi,-1
jnel1
movsi,3
l2:
leadi,first
adddi,si
moval,[di]
leadi,second
adddi,si
movbl,[di]
sbbal,bl
das
leadi,forth
adddi,si
mov[di],al
decsi
cmpsi,-1
jnel2
codeends
endstart
3、编程计算((Z+X*Y-328)-V)/Y,其中X、Y、Z、V均为16位带符号数,假设初始数据分别装入X、Y、Z、V单元,要求上式计算结果的商存入AX,余数存入DX寄存器。
同学自行给出初始值加以验证程序。
首先实验中任选一组数据进行测试,选取的数据为
X=0234HY=09ABHZ=0ABCHV=0178H
程序代码如下所示:
datasegment
xdw0234H
ydw09ABH
zdw0ABCH
vdw0178H
dataends
codesegment
assumeds:
data,cs:
code
start:
movax,data
movds,ax
leasi,x
movax,[si]
leasi,y
movbx,[si]
imulbx
leasi,z
movbx,[si]
addax,bx
adddx,0
sbbax,328
sbbdx,0
leasi,v
movbx,[si]
sbbax,bx
sbbdx,0
leasi,y
movbx,[si]
idivbx
codeends
endstart
运行结果如下:
结果商AX=0234H余数DX=07FCH
经验算,结果正确。