河北工业大学-汇编实验报告

2019-01-10 11:40

汇编实验

实验一 顺序与分支程序设计

一 、实验目的

1) 掌握顺序程序设计方法。

2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。

3) 熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。 二、实验内容

1) 有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补

码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。

2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。

3) 在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。

4) 要求同上,只是比较的数为有符号数。

5) 将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。

6) 从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。

?X2?X(X?3) ?2?X?2X(X?4)Y??2?X(X?5)2?X/2(X?6)?7) 从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。

a)

b) c) d)

三、实验设备

PC机一台

当输入字符为A,则计算X+Y,并以十六进制形式显示出来 当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来 当输入字符为C,则计算X*Y,并以十六进制形式显示出来 当输入字符为D,则计算X/Y,并以十六进制形式显示出来

四、实验准备

1) 分析题目,将程序中的原始数据和最终结果的存取方法确定好。 2) 画出流程图。 3) 写出源程序。

4) 对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。 五、实验步骤 1) 输入源程序。

2) 汇编、连接程序,生成 .EXE文件,执行文件,检查结果。 六、实验报告的要求

1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。 2) 说明程序中各部分所用的算法。

3)说明主要符号和所用到寄存器的功能。

4) 总结为什么在设计分支程序时必须解决三个问题:判断、转向和定标号。

5) 说明标志位CF、SF和OF的意义。 6) 上机调试过程中遇到的问题是如何解决的。 7) 对调试源程序的结果进行分析。

Exam1:

DATA SEGMENT ;数据段 BUF1 DW 7898H

BUF2 DW 4 DUP (0), 0AH, 0DH,'$'

BUF3 DW 4 DUP (0), '$'

DATA ENDS ;数据段结束 CODE SEGMENT ;代码段

ASSUME CS:CODE, DS:DATA ;段寄存器关联说明伪指令

BEGIN: MOV AX, DATA

MOV DS, AX ;将数据段的基地址装入数据段寄存器DS MOV AX, BUF1 ;将字型变量BUF1的值装入AX寄存器 ADD AX, 0 ;AX寄存器里的数据加0,以便进行转移测试

JS NEXT ;判断(AX)的正负,若为负则转到NEXT,为正则往下顺序执行。

MOV BUF2, AX ;为正,反码与原码一样 MOV BUF3, AX ;为正,补码与原码一样 JMP EEE

NEXT: AND AX, 7FFFH ;将符号位变为0 NOT AX ;求反码

MOV BUF2, AX ;将BUF1的反码装入BUF2 INC AX ;求补码

MOV BUF3, AX ;将补码装入BUF3 EEE: MOV CX, 0004H ;将0004H装入CX计数器寄存器中 MOV DI, OFFSET BUF2 ;将DI指向变量BUF2开始的存储单元

MOV DX, [DI] ;将DI所指的数据装入DX寄存器中

ADD DI, 03 ;将DI指针下移三个字 BBB: MOV AX, DX ;将DX中的内容装入AX寄存器中 AND AX, 000FH ;即使BUF2的低四位不变,其余均变为0

CMP AL, 0AH ;比较[AL]与0AH的大小,以便能正确转换为0-9的ASCII值

JB QQQ ;若[AL]<0AH,则转到QQQ,否则,顺序执行 ADD AL, 07H ;因为[AL]>0AH,所以[AL] +07H,使得AL能转换成相应数字的ASCII值

QQQ: ADD AL, 30H ;将[AL]转换成相应数字的ASCII值

MOV [DI], AL ;将AL中的内容装入以DS中的内容为段基地址,以DI的内容为偏移地址的存储单元中

DEC DI ;DI=DI-1,即将DI指向前一个存储单元

PUSH CX ;保存CX寄存器的内容 MOV CL, 04H ;给CL寄存器赋值为04H SHR DX, CL ;将[DX]逻辑右移四位 POP CX ;恢复CX寄存器的内容

LOOP BBB ;循环判断语句,CX=CX-1,若CX不等于0,则转到BBB,将下一个低四位存入存储单元中,否则循环结束 MOV CX, 0004H ;给CX寄存器赋值为0004H

MOV SI, OFFSET BUF3 ;将SI指向变量BUF3开始的存储单元 MOV DX, [SI] ;将SI所指的数据装入DX寄存器中 ADD SI, 03H ;将DI指针下移三个字 CCC: MOV AX, DX ;将DX中的内容装入AX寄存器中

AND AX, 000FH ;即使BUF3的低四位不变,其余均变为0 CMP AL, 0AH ;比较[AL]与0AH的大小,以便能正确转换为0-9的ASCII值

JB DDD ;若[AL]<0AH,则转到DDD,否则,顺序执行 ADD AL, 07H ;因为[AL]>0AH,所以[AL] +07H,使得AL能转换成相应数字的ASCII值

DDD:ADD AL, 30H ;将[AL]转换成相应数字的ASCII值 MOV [SI], AL ;将AL中的内容装入以DS中的内容为段基地址,以SI的内容为偏移地址的存储单元中

DEC SI ;SI=SI-1,即将SI指向前一个存储单元 PUSH CX ;保存CX寄存器的内容 MOV CL, 04H ;给CL寄存器赋值为04H SHR DX, CL ;将[DX]逻辑右移四位 POP CX ;恢复CX寄存器的内容

LOOP CCC ;循环判断语句,CX=CX-1,若CX不等于0,则转到CCC,将下一个低四位存入存储单元中,否则循环结束

MOV DX, OFFSET BUF2 ;将BUF2的偏移地址装入DX寄存器中 MOV AH, 09H

INT 21H ;在屏幕上显示BUF1的反码 MOV DX, OFFSET BUF3

MOV AH, 09H

INT 21H ;在屏幕上显示BUF1的补码 MOV AH, 4CH

INT 21H ;带返回码终止 CODE ENDS END BEGIN

Exam2:

DATA SEGMENT ;数据段

A DB 34H, 18H, 2 DUP (0), '$' ;定义字节型变量,其后的每操作数都占有一个字节

B DB 56H, 83H ;定义字节型变量,其后的每操作数都占有一个字节

DATA ENDS ;数据段结束 CODE SEGMENT ;代码段 ASSUME CS: CODE, DS:DATA START: MOV AX, DATA

MOV DS, AX ;将数据段基地址装入数据段寄存器DS MOV AL, A ;将A所指的数装入AL寄存器中 MOV BL, B ;将B所指的数装入BL寄存器中


河北工业大学-汇编实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:本科生毕业设计(论文)开题报告范文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: