汇编和接口实验参考文档.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE \* MERGEFORMAT- 1 - 汇编与接口实验 PAGE \* MERGEFORMAT- 3 - 汇编与接口实验 PAGE \* MERGEFORMAT- 2 - 《汇编与接口第一次实验》 第一次实验 作业题目: 一、实验目的 1.进一步学习汇编语言基本指令使用方法; 2.学习DEBUG调试工具的基本使用方法;掌握debug调试命令a、u、r、d、t、g等 3.逐条观察程序指令的执行过程,理解指令的功能,理解程序自动、顺序地执行的概念,实践其过程(重点)。 二、实验题目 1.编写、输入一个32位二进制数相加程序,逐条执行指令,观察指令执行情况。 2.使用已经过汇编和连接的小程序(t3-2.exe),将其装入内存,逐条执行指令,观察执行过程和结果。在实验过程中,使用D命令修改XXX和YYY单元中的数据,再重新计算其结果。4、如果在一个程序开始执行之前(CS)=0A7F0H(如果十六进制数的最高位为字母,则应该在其前加1个0),(IP)=2B40H,试问该程序的第1个字的物理地址是多少? 实验第一部分 1. 启动计算机的WINDOWS操作系统,在开始菜单中找到“运行”,输入“cmd”后回车,启动ms-dos command程序,再在该程序内输入“DEBUG”并按回车,即启动DEBUG调试程序。 2. 开始编程 在启动的debug程序里输入a命令进入编程功能 在编程部分逐条输入32位二进制数相加程序的指令,完成无符号和1200ffffH的加法操作,程序的代码见图1: 图 SEQ 图 \* ARABIC 1,程序编写,r指令(执行前),u指令 对32位数的低16位操作时,存放初始地址是0AE1:0100, 使用U命令对代码进行反汇编我们可以看到对应地址中所存放的指令和他们对应的长度,可以看到MOV和ADD指令的的长度都是3,但ADC的指令长度为4,因为ADC指令中需要考虑进位CF所以比MOV和ADD多了一位长度,如上图。 使用r命令后,可以看到指令执行前各寄存器的内容,CS:IP的内容为0100,下一条执行的指令为MOV AX,0100,操作数寻址为立即数寻址,内存单元的值为0100H。 图 SEQ 图 \* ARABIC 2 使用t命令单步执行指令后,所得结果见上图2,执行过程中,CS:IP的内容随指令长度的变化依次增加,标志位寄存器只有PF,CF的值在计算过程中有变化,其中在两次CF的标志位CY时表示有进位发生,OF一直为NV,表明计算结果没有溢出。 图 SEQ 图 \* ARABIC 3 对程序使用r命令查看寄存器AX,DX的值,见上图3,可知,AX=00FF,DX=2201,CF=0,说明运算结果低16位为00FF,高16位为2201,无进位,即结果是220100FF,计算正确。 图 SEQ 图 \* ARABIC 4 使用d命令查看程序运行过后的结果如上图4,可以看到,内存单元的存放顺序是低地址放低字节,高地址放高字节,同时数据的存放是按顺序连续存放的,指令的存放与数据是同时的,都存放在连续的内存地址中。 图 SEQ 图 \* ARABIC 5 使用e命令对内存单元的内容进行修改,再次运行程序,可见结果也有了相应的改变。如下图。 图 SEQ 图 \* ARABIC 6 使用g指令再次运行程序,可以看到运算结果也相应改变。 图 SEQ 图 \* ARABIC 7 实验第二部分 图 SEQ 图 \* ARABIC 8 将写的asm文件转化成exe文件,如上图 图 SEQ 图 \* ARABIC 9 运行debug程序,u命令进行反汇编,查看程序内容,运行r命令查看寄存器内容和下一条将要执行的内容,由于这里我们并没有开始运行程序,因此寄存器的内容都为原初始内容,如上图。 图 SEQ 图 \* ARABIC 10 t指令运行程序,如上图,可以看到IP的值在对应着我们u命令查看的指令的地址进行递增。 在这几步中标志位发生变化有ZF和PF,其中在XOR DX DX时两个相同的数进行异或操作结果是零因此结果是零,所以ZF=ZR。其中[0000]是间接寻址。 图 SEQ 图 \* ARABIC 11 继续运行指令,在这几步中,我们可以看到,在上一步的结尾的ADD AX AX可以看到AX变为2468(1234+1234),ADD DX DX 的结果仍然是ZR(零)。在上图中的OF标识符发生变化,原因是ADD AX AX 命令后AX寄存器的数值的最高位(符号位发生改变)。 继续运行指令,在这几步的运行过程中,ADD AX AX,后由于符号位改变所以OF = OV,因为产生进位,因此进位标志CF = CY,结果是2348 进1。 将AX中的数据存入0004指向的内存单元中

文档评论(0)

kbook + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档