汇编实验报告一_第1页
汇编实验报告一_第2页
汇编实验报告一_第3页
汇编实验报告一_第4页
汇编实验报告一_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计试验汇报试验名称上机过程及次序结构与分支结构程序设计试验班级学号姓名日期成绩评阅人 软件学院试验目标与意义1、掌握汇编语言程序设计基本方法和技能;2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;3、熟练掌握宏汇编程序MASM使用;4、熟练掌握连接程序LINK使用;5、学习数据传送及算数和逻辑运算指令使用方法;6、掌握分支程序结构;掌握分支程序设计、调试方法;熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序;试验环境操作系统:WindowsXP调试软件:EditPlus3,MASM5.0上机地点:综合楼311试验预习内容(1)熟悉上机练习过程和伪指令试验试验预习内容:在试验前,充分熟悉EditPlus3环境以及配置方法,熟悉各种debug惯用指令:U、D、T、P、G、A、E及R命令使用和含义,了解数据传送指令和算数以及逻辑运算指令使用方法,在理论上了解数据存放情况以及DD,DB,DW伪指令使用方法和含义。试验思绪:按照书上程序打入代码,进行汇编、连接和运行程序查看此时程序运行情况,之后进入debug界面,分别使用U、D、T、P、G、A、E及R命令等惯用指令,可查看此时程序执行情况以及此时存放器存放情况以及对于内存使用情况。开始程序一流程图:开始设置数据段地址设置数据段地址设置堆栈段地址设置堆栈指针设置堆栈指针取取DATA1与DATA2相加与DATA2相加保留结果保留结果结束结束开始程序二流程图:开始设置数据段地址设置数据段地址设置堆栈段地址设置堆栈指针设置堆栈指针保留结果保留结果结束结束(2)次序结构程序设计试验试验预习内容:在试验前了解十进制,十六进制和ASCII码之间转换,了解怎样从键盘中输入字符和回车换行,以及在屏幕中显示汇编指令。试验思绪:从键盘中输入要计算数字,将其进行平方运算,利用计算得到数字,了解十进制数字、十六进制数字与其对应ASCII码转换方法,将数字显示到屏幕上。开始程序流程图:开始设置数据段、堆栈段地址设置数据段、堆栈段地址建立堆栈指针制表制表输入一个数字输入一个数字保留数字保留数字计算偏移量计算偏移量转化成十进制输出转化成十进制输出转化成十六进制输出转化成十六进制输出保留结果保留结果结束结束(3)分支程序设计试验试验预习内容:在试验前了解分支结构特点,明白跳转指令和程序转移指令使用使用,以及两个数进行比较后各个标志位改变。试验思绪:首先定义三个数,先比较前两个数符号,假如相同则比较第二个数字和第三个数符号,假如相同,利用左移一位判断正负,之后进行显示。程序流程图:开始开始设置数据段地址设置数据段地址设置堆栈段地址取得第一个数据取得第一个数据带进位左移一位带进位左移一位CF为0?YCF为0?取得第二个数据N取得第二个数据取得第二个数据带进位左移一位取得第二个数据带进位左移一位带进位左移一位CF为1?N带进位左移一位CF为1?CF为1?取得第三个数据YNCF为1?取得第三个数据输出空格带进位左移一位Y输出空格带进位左移一位CF为1?CF为1?取得第三个数据N取得第三个数据带进位左移一位YN带进位左移一位输出负号输出负号CF为0?CF为0?y输出正号输出正号保留结果保留结果结束结束试验步骤与调试方法(1)熟悉上机练习过程和伪指令试验试验步骤:上机试验首先要配置editplus环境,之后输入代码,运行debug,在debug中输入对应指令,观察结果。在程序中首先定义数据段和代码段,在定义数据时使用伪指令定义,之后运行debug,了解了数据在内存中存放。之前对debug了解不深,有很多语句都不能很好使用和了解,在经过这次试验后,对于数据存放和debug有了更深了解。程序二自行分析数据存放情况:DATA1: DATA2:DATA3:03H00HFDHFFH41H00H03HFDH41H03H00H00H00HFDHFFHFFHFFH41H00H00H00H (2)次序结构程序设计试验本试验刚开始要求用查表法来实现。首先定义数据段定义数字,输入数字,将其转化成对应地址偏移量,求数据地址送入BX,求得平方后除以10得到商和余数,利用十进制与ASCII码转化将其输出到屏幕上。十六进制与十进制类似,INT212号功效每次只能输出一个字符,所以,需要将将结果转化成一个高位和一个低位存在不一样存放器中分别输出。在试验过程中对于不能正确运行时候,使用debug中T和P命令来执行得知程序执行情况。(3)分支程序设计试验首先,试验先定义数据段数据,经过将SI值赋为0,得到第一个数据有效地址,将数据送入存放器得到CF值,之后按照一样方法取得第二个数字,并把其送入存放器。使用RCL指令将最高位送入CF中,得到CF是0还是1,假如不相同则取第三个数据进行比较,不然输出空格。在取第三个数据之后依然左移一位,得到CF位,判断CF是否相同,假如不一样,则输出空格,假如相同则继续判断CF位数值,假如数值为1,则输出负号,假如数值为0,则输出正号。试验开始不能很好使用跳转命令等指令,走过很多弯路,在经过学习后,愈加好了解了各种跳转指令。在试验过程中,开始不能输出负号,经验证得知没有很好输入int21H功效,因而无法正常从显示器里输出。经过更改,程序正常运行。五、试验数据与试验结果试验一程序一:首先使用指令T进行单步执行操作,执行结果以下:从中能够看出初始值为13和26,之后继续进行单步执行,知道程序结束,此时程序执行完成,执行结果以下:之后,执行D0B3E:0002观察结果,得知此时和为39,结果以下列图:之后,使用E命令,在E后加入数据地址,之后输入要修改数据,将13改为3,将26改为5,而且使用了D命令观察数据是否更改,经验证数据已经进行了更改,结果以下列图:之后,使用G命令来继续执行程序,结果以下列图:之后使用D命令来显示结果得知结果为8,结果正确:使用A命令来更改ADD为SUB,首先使用U命令来进行反汇编,找到ADD所在地址,使用A命令,在A后面加上ADD地址进行修改,以下列图:之后进行单步执行得到结果以下得到减法结果为ED:程序二:经过debugD命令显示,得到以下结果经过和之前试验预先猜测一致,这么深入加深了我对汇编语言数据存放了解。试验二:输入3,得到运行结果为输入5,结果如图:试验三:试验中初始定义值为-1,-2,-3经过单步运行结果以下:此时DL值为2D,负号ACSII码值为2D,所以输出结果正确。之后把数据更改为1,2,3,输出结果以下,此时DL值为2B,结果正确,示意图以下:使用E命令来修改数据:运行结果之后将数据更改为1,-2,-3,得到结果DL值为20,结果依然正确六、试验用程序清单(要有注释)(1)熟悉上机练习过程和伪指令试验题目一:DSEG SEGMENT ;数据段开始DATA1DB13H,26H ;原始数据DATA2DW0 ;保留结果单元DSEGENDS ;数据段结束SSEGSEGMENTSTACK ;堆栈段开始SKTOPDB20DUP(0)SSEGENDS ;堆栈段结束CSEGSEGMENT ;代码段开始ASSUMECS:CSEG,DS:DSEGASSUMESS:SSEGSTART:MOVAX,DSEG ;初始化数据端地址MOVDS,AXMOVAX,SSEG ;初始化堆栈段地址MOVSS,AXMOVSP,LENGTHSKTOP ;设置堆栈指针MOVAL,DATA1 ;取第一个数据ADDAL,DATA1+1 ;与第二个数据相加MOVBYTEPTRDATA2,AL ;保留结果MOVAH,4CHINT21H ;返回DOSCSEGENDS ;代码段结束ENDSTART ;源程序结束题目二:DSEG SEGMENT ;数据段开始DATA1 DB 3,-3,'A'DATA2 DW 3,-3,'A'DATA3 DD 3,-3,'A'DSEG ENDS ;数据段结束SSEG SEGMENT STACK ;堆栈段开始SKTOP DB 20DUP(0)SSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG ;代码段开始START: MOV AX,DSEG ;初始化数据段基址 MOV DS,AX MOV AX,SSEG ;初始化堆栈段基址 MOV SS,AX MOV AH,4CH INT 21H ;返回DOSCSEG ENDS ;代码段结束END START ;源程序结束次序结构程序设计试验DSEG SEGMENT ;建立数据段NUM DB 0D,1D,4D,9D,16D,25D,36D,49D,64D,81DSSEG SEGMENT STACK ;建立堆栈段SKTOP DB 20DUP(0)SSEG ENDS ;堆栈段结束CSEG SEGMENT ;代码段开始 ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEG ;初始化 MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,SIZESKTOP MOV BX,OFFSETNUM ;制表 MOV AH,01H INT 21H ;输入一个数,存入存放器 PUSH AX ;保留输入数字 MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H ;回车换行 POP AX SUB AL,30H ;转化成0-9数字其中30h为0ASCII码 XLAT PUSH AX ;AX入栈 XOR AH,AH MOV CH,10 DIV CH ADD AL,30H MOV CH,AH MOV DL,AL MOV AH,02H INT 21H ;转化成十进制 MOV DL,CH ADD DL,30H MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H ;输出结果 INT 21H POP AX ;ax出栈 MOV DL,16 DIV DL MOV CH,AH ;除以16得到余数 MOV CL,AL ;除以16得到商 ADD AL,30H MOV DL,AL MOV AH,02H INT 21H ;输出高位 ADD CH,30H MOV DL,CH MOV AH,02H INT 21H ;输出低位 MOV AH,4CH INT 21HCSEG ENDS ;代码段结束END START ;程序结束试验三:DSEG SEGMENT ;数据段开始NUM DB -1,-2,-3DSEG ENDS ;数据段结束CSEG SEGMENT ;代码段开始SSEG SEGMENT STACK ;建立堆栈段SKTOP DB 20DUP(0)SSEG ENDS ;堆栈段结束 ASSUME CS:CSEG,DS:DSEG ASSUME SS:SSEGSTART: MOV AX,DSEG ;初始化 MOV DS,AX MOVAX,SSEG ;初始化堆栈段地址MOVSS,AXMOVSP,LENGTHSKTOP ;设置堆栈指针 MOV SI,0 ;将0赋给SI,使偏移地址为0AGAIN: RCL NUM[SI],1 ;带进位左移一位 JNC NEXT1 ;若CF=0,跳到NEXT1 INC SI ;得到下一个数 RCL NUM[SI],1 ;带进位左移一位 JNC NEXT2 ;第一个是正数,第二个数是负数,跳到NEXT2 INC SI ;取下一个数 RCL NUM[SI],1 ;带进位左移一位 JNC NEXT2 ;1和2为负数,3为正数,跳到NEXT2 MOV DL,2DH ;都为负数,输出负号 JMP FINISHNEXT1: INC SI RCL NUM[SI],1 JC NEXT2 ;1为正数,2为负数,到NEXT2 INC SI RCL NUM[SI],1 JC NEXT2 ;1,2为正数,3为负数,到NEXT2 MOV DL,2BH ;1,2,3为正数,输出正号 JMP FINISHNEXT2: MOV DL,20H JMP FINISHFINISH: MOV AH,02H INT 21H MOV AH,4CH INT 21HCSEG ENDS END START思索题(必需回答)写明以下问题按照操作次序写出上机操作步骤;答:首先应该配置EditPlus,然后使用masm.exe编译,生成.obj文件,之后使用link.exe连接,生成可执行文件,之后用cmd/c运行,最终用debug进行调试。上机操作步骤与次序能够调整吗?为何?答:不能调整,必须先配置EditPlus,这么才有编辑汇编语言环境,必须使用masm进行编译,这么才能够生成.msm文件,生成.obj文件,因为在连接时候寻找就是.obj文件,不然连接不能经过,经过连接生成.exe文件,然后才能够运行,不然不能运行,假如运行犯错或者想要了解数据存放情况,能够调用debug各种命令来进行。所以上机操作次序不能调整。写出用DEBUG中E命令修改内存单元内容两种方法;答:使用debug中E命令来修改内存单元值,包含以下两种格式:E<地址>来修改当前所给地址中值,按空格后能够继续更改下一个内存单元值,直到打到回车为止。E<地址><内容表>表示从当前偏移地址开始接下来内存单元修改为之后多个存放单元内容,比如:EDS:00011234表示从 DS:0001开始四个单元内容修改为12h,34h写出用DEBUG中A命令修改指令方法及应注意问题;A命令作用为直接输入汇编语句,而且直接存到内存当中使用格式:A[address]说明:参数为address,表示指定键入汇编语言指令位置,对address使用十六进制值,并键入不以h字符结尾每个值,假如不指定地址,A将在它上次停顿处开始汇编,若指出地址,则地址为逻辑地址形式。段代替记忆码为CS:、DS:、ES:、SS:、。字符串处理记忆码必须明确申明字符串大小。Debug提醒用户输入更改信息后,提醒下一地址,按回车即可从当前命令中跳出。注意:1)远程返回记忆码是retf。2)处理汇编语言指令外,还能够使用伪指令DB,DW,DD,将字节或字送入对应单元中。3)不能使用符号地址。4)地址必须放在方括号中。总结DEBUG中E、D、U命令功效;答:E命令是用来修改一个或多个内存单元内容;D命令是用来显示内存,将内存中数据已十六进制和ASCII码形式先显示出来;U命令是反汇编,将内存中机器码一指令助记符形式显示出来。总结DEBUG中P、G、T命令功效;答:P命令是用来执行汇编程序,单步跟踪,不会跟踪进入子程序或软中止。G命令是执行汇编指令,连续执行指令知道碰到断点后停顿,并将存放器内容和下一条要执行指令显示出来。T命令是从当前段地址开始执行指定代码数,每执行一次显示全部存放器(包含标志存放器)值。写出数据定义伪指令DB、DW和DD存放整数格式;答:DB:在内存中用一个字节存放一个整数,由低地址到高地址依次存放。DW:在内存中用两个字节存放一个整数,数据高位字节在高地址,低位字节在低地址,由低地址到高地址依次存放。DD:在内存中用四个字节存放一个整数,高位字节在高地址,低位字节在低地址,由低地址到高地址依次存放。同一个正数分别用DB、DW和DD定义,存放格式有何改变?答:同一个正数分别用DB、DW和DD定义,存放格式不一样首先表现在存放空间大小,DB用一个字节进行存放,DW用两个字节进行存放,DD用四个字节进行存放,高地址存高位,低地址存低位,高位补0。同一个负数分别用DB、DW和DD定义,存放格式有何改变?答:同一个负数分别用DB、DW和DD定义,存放格式不一样首先表现在存放空间大小,DB用一个字节进行存放

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论