汇编语言上机实验八2015李中
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程:汇编语言程序设计
专业班级:计算机科学与技术
学号:
姓名:李中
实验八算术运算与代码转换实验
一、实验目的
1、掌握多字节整数的加、减、乘除运算方法。
2、掌握十进制的BCD吗表示方法及BCD吗的加减运算方法
3、掌握浮点数的表示方法及在存储区中的存储格式
4、掌握浮点的加、减、乘除运算方法。
5、掌握BCD吗与二进制数、BCD吗与ASCll吗、二进制数与BCD吗之间的相互转换
方法
二、实验要求
·1、学会使用BCD吗运算调整指令
·2、明确INC指令与ADD指令的区别,将INC指令改为ADD指令结果怎样
·3、在DEBUG下观察浮点数的存储格式
·4、在DEBUG下用T命令跟踪ADC及SB指令加、减的过程。弄清加减的进位、借位来自何处
三、实验内容
1、在MLTOR和MLTED开始的内存单元中,分别存放一个长度相同的无符号整数,数据长度存放在LEN单元中,编制程序计算两个数据之积,并将结果存入PRDT开始的内存单元
2、编写程序,将两个带符号十进制数据的ASCll吗串转换为二进制补码表示的数据,计算两数之和,并将结果显示在屏幕上。数据范围如果产生溢出,则在屏幕上显示字符串“overflow”。
四、解题思路
1、被乘数是1,中间结果加上被乘数,被乘数左移一位。被乘数是0,被乘数左移一位。
2、利用查表法。将键盘输入的十进制数存入内存中。从高位到低位依次取值,将中间结果乘10与之相加。转化为二进制,在依据键盘输入的符号决定要进行的计算。最后将结果输出。
五、流程图
No
No
六、子程序说明文件
1、
(1)子程序名:MUL2
(2)子程序功能:多字节无符号整数之积
(3)入口条件:AX,BX分别存放乘数和被乘数
(4)出口条件:DX,SI存放结果
(5)受影响的寄存器:CF,ZF
子程序清单在下面
2、
(1)子程序名:DATBIN
(2)子程序功能:十进制数据转化为二进制数据进行计算(3)入口条件:DI,SI指向内存中数的高位
(4)出口条件:结果放在CX中
(5)受影响的寄存器:CF,ZF等
子程序清单在下面:
七、编程实现
1、主程序
DSEG SEGMENT
MLTOR DB 6FH,0C8H
MLTED DB 58H,0A7H
LEN DW 2
PRDT DW 2 DUP (0)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
LEA SI,MLTOR
LEA DI,MLTED
MOV CX,LEN
MOV AX,WORD PTR [SI]
MOV BX,WORD PTR [DI]
CALL MUL2
LEA DI,PRDT
MOV [DI],DX
MOV [DI+2],SI
INT 3
MOV AH,4CH
INT 21H
INCLUDE SY811.ASM
CSEG ENDS
END START
子程序:
PUBLIC MUL2
MUL2 PROC
XOR SI,SI XOR DX,DX XOR CX,CX GO: OR BX,BX JNZ NEXT1 RET
NEXT1: SHR BX,1 JNC NEXT2 CLC
ADD DX,AX ADC SI,CX NEXT2: SHL AX,1 RCL CX,1 JMP GO MUL2 ENDP
编辑:
汇编:
连接:
运行:
2、主程序:
DSEG SEGMENT
DATA1 DB 10 DUP (0)
DATA2 DB 10 DUP (0)
ONES DB 'OVERFLOW!'
TWOS DB 'INPUT ERROR!' HTAB DB '0123456789ABCDEF' DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG
MOV DS,AX
MOV ES,AX
LEA DI,DATA1
LEA SI,DATA1
MOV AH,01H
INT 21H
MOV DL,AL
INC SI
INC DI
GO: MOV AH,01
INT 21H
STOSB
CMP AL,0DH
JNE GO
CMP DL,'+'
JZ ADD1
CMP DL,'-'
JZ SUB1
JMP ERROR2 ADD1: MOV DH,1
JMP NEXT1 SUB1: MOV DH,0
NEG CX
NEXT1: PUSH CX
LEA DI,DATA2 LEA SI,DATA2 MOV AH,01H
INT 21H
MOV DL,AL
INC SI
INC DI
GO1: MOV AH,01
INT 21H
STOSB
CMP AL,0DH
JNE GO1
CALL DATBIN
CMP DL,'+'
JZ ADD2
CMP DL,'-'
JMP SUB2
JMP ERROR2 ADD2: ADD DH,1
JMP NEXT2 SUB2: ADD DH,0
NEG CX
NEXT2: POP AX
CLC
ADD AX,CX
CMP DH,1
JZ GO3
CMP DH,0
JZ SAME0 SAME2: CMP AX,0
JL ERROR1
JMP GO3 SAME0: CMP AX,0