汇编语言上机实验八2015李中

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档