电子科大汇编实验2014

  • 格式:doc
  • 大小:1.45 MB
  • 文档页数:19

计算机专业类课程 实验报告

课程名称:汇编语言程序设计 学 院:计算机科学与工程学院 专 业:计算机科学与技术 学生姓名: 学 号:

日 期:2014年12月16日 电 子 科 技 大 学 实 验 报 告

实验一 一、实验室名称: 主楼A2-412 二、实验项目名称:汇编源程序的上机调试操作基础训练 三、实验原理: DEBUG 的基本调试命令; 汇编数据传送和算术运算指令 MASM宏汇编开发环境使用调试方法 四、实验目的: 1. 掌握DEBUG 的基本命令及其功能 2. 学习数据传送和算术运算指令的用法 3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程 五、实验内容:

1. DEBUG命令的使用

2. 程序的调试与运行 3.编写程序计算以下表达式: Z=(5X+2Y-7)/2 设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。 1.编辑源程序,建立一个以后缀为.ASM的文件. 2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。 3.连接目标程序,产生可执行程序。 4.用DEBUG程序调试可执行程序,记录数据段的内容。

六、实验器材(设备、元器件): PC机 ,MASM软件平台。 七、实验数据及结果分析: 程序说明: 功能:本程序完成Z=(5X+2Y-7)/2这个等式的计算结果求取。其中X 与Y是已知量,Z是待求量。 结构:首先定义数据段,两个DB变量VARX与VARY(已经初始化),以及结果存放在VARZ,初始化为?。然后定义堆栈段,然后书写代码段,代码段使用顺序程序设计本程序。 程序框图:

开始AX=VARXCL=2

AX=>1VARZ=AX结束 程序清单:

TITLE EQUATION COMPUTE

DATA SEGMENT VARX DW 15 VARY DW 20 VARZ DW ? DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP (0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 COMP PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,VARX MOV CL,2 SHL AX,CL ;4*X ADD AX,VARX ;5*X ADD AX,VARY ;5X+Y ADD AX,VARY ;5X+2Y SUB AX,7 ;5*X+2Y-7 SAR AX,1 ;(5*X+2Y-7)/2 MOV VARZ,AX ;存结果 RET COMP ENDP CODE ENDS END COMP

调试说明:

将汇编语言(.asm文件)翻译为目标代码程序(.obj文件)(MASM.exe); 没有出现错误或者警告,下一步进行链接,连接目标代码程序和库函数代码生成可执行程序文件(.exe文件),(LINK.exe); 在debug程序中,用t命令显示每一步执行结果。如下图所示: VARX VARY VARZ 5 4 13

九、实验结论: 通过本次实验,我们学习了解掌握了DEBUG 的基本命令及其功能,学习了数据传送和算术运算指令的用法,熟悉了在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。完成了Z = (5*X + 2*Y - 7)/ 2 算术式的编程计算,使用到了以上学习到的知识,并且利用了顺序程序设计的思想。通过本次实验,大大提升了对汇编程序设计这门课实践意义的理解,提高了编程能力和设计水平。 电 子 科 技 大 学 实 验 报 告

实验二 一、实验室名称: 主楼A2-412 二、实验项目名称:分支程序与循环程序设计 三、实验原理:

分支程序设计基本规范与调试方法,

循环程序设计与调试方法;分配与使用寄存器的相关方法 四、实验目的: 1、 掌握分支程序的结构。 2、 掌握分支程序的设计与调试方法。 3、 掌握循环程序设计与调试方法 4、 掌握正确分配与使用寄存器。

五、 实验内容: 根据输入的字母进行大小写转换(若是输入小写字母则转换成为大写字母,反之),若输入的不是字母则提示出错并重新输入。

六、实验器材(设备、元器件): PC机,MASM软件平台。 七、实验步骤: 程序说明: 功能:大小写转换,输入大写,输出小写;输入小写,输出大写。输入不是字母,打印ERROR,重新输入。 程序框图: 开始输入提示AL=INPUTAL>41H?显示ERROR,重复输入

AL<5AH?DL=ALDL=DL+20HDL=ALDL=DL-20H

BL=DL输出BL

结束

YESNOYESNO

程序清单: DATA SEGMENT DATAS DB 'PLEASE INPUT:',0DH,0AH,'$' STR DB 'ERROR',0DH,0AH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATA MOV DS,AX MOV AH,9H INT 21H ;输出“PLEASE INPUT:” INPUT: MOV AH,1 INT 21H ;用户输入,字符存储于AL中

CMP AL,41H JS ERROR

CMP AL,5AH ;大写字母Z JS BIGGER

MOV DL,AL ;如果是小写字母,减去20H SUB DL,20H JMP END1

BIGGER: MOV DL,AL ;如果是大写字母,加上20H ADD DL,20H JMP END1 ERROR: MOV BL,STR MOV AH,2 INT 21H ;显示输出 JMP INPUT ;出错重新输入 END1: MOV BL,DL MOV AH,2 INT 21H ;显示输出

MOV AH,4CH ;返回DOS INT 21H CODE ENDS END BEGIN

调试说明:

九、实验结论: 通过本次实验,掌握了分支程序的结构特点,学习了分支程序的设计和调试方法。运用了分支程序设计的思想,本实验的原理框图较为复杂,但是框图给出了明确的思路和解题方向,是很好的学习方法。本次程序设计实验运用了数个跳转指令,JL ,JLE ,跳转指令在分支程序设计过程中具有很重要的特点。

电 子 科 技 大 学 实 验 报 告 实验三 一、实验室名称: 主楼A2-412 二、实验项目名称:数制、码制和子程序的编程与调试 三、实验原理:

子程序设计基本规范与调试方法;MASM宏汇编开发环境使用方法

数制转换;分配与使用寄存器的相关方法 四、 实验目的: 1. 熟练掌握编写汇编语言原程序的基本方法和基本框架。 2. 熟练使用DEBUG调试程序。 3. 掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。 4. 掌握用DOS功能调用,实现字符的输入和显示。 5. 掌握子程序的编程与调试方法。 五、实验内容: 编程实现:从键盘输入两个2位十进制正数,相加,结果以十六进制数形式显示在屏幕上。(要求结果显示完整的算式)

六、实验器材(设备、元器件): PC机,MASM软件平台。 七、 实验步骤: 程序说明: 功能:从键盘输入两个2位十进制正数,相加,结果以算式输出。输入一个数,回车,再输入另一个数,回车,就会显示算式。 程序框图:

主程序STR1=INPUTSTR2=INPUTCALL DTOBCALL BTOHDX=RESSTR输出结果结束DTOBPUSH AX ,CX, DXAL=[STR1+2]AL=AL-30HAL=AL*10AL=AL+[STR1+3]AL=AL-30HTEMPSTR=AL对第二个数执行同样操作AL=AL+TEMPSTRTEMPSTR=ALPOP DX,CX,AXRETBTOHPUSH AX,BX,CX,DXCH=2DL=TEMPSTRBX=RESSER

CL=4DL<<4

AL=DLAL=AL&0FH取出高四位

AL<9?AL=AL+07HAL=AL+30H[BX]=ALBX=BX+1CH=CH-1CH!=0?POP DX,CX,BX,AXRETSTR1-STR2YESNO

NOYes

程序清单: DATA SEGMENT STR1 DB 3,0,2 DUP(?),'$' STR2 DB 3,0,2 DUP(?),'$';分配3个字节存储空间,存储数字 TEMPSTR DB ? ;暂存转换后的数 RESSTR DB 0,0,'H','$' ;存储结果 RESULT DB 2 DUP(?),'+',2 DUP(?),'=',2 DUP(?),'H','$';存数结果算式 DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK1,DS:DATA BEGIN:MOV AX, DATA MOV DS, AX ;装入段寄存器