第一次汇编实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次汇编实验
一、实验目的
1.熟悉汇编语言源程序书写格式。
2.熟悉汇编语言源程序的编辑、汇编、连接、执行步骤。
3.练习DEBUG常用命令的使用。
4.练习常通用数据传送类指令的使用。
二、实验内容
1.编辑程序一,编写程序并用DEBUG命名保存,得出结果并用DEBUG单步调试。
2.编辑程序二,用DEBUG调试,查看DATA段中定义的数据在内存中的存放方式,
并单步执行查看每一语句执行后相关寄存器的内容。
3.编辑程序三,将立即数2AH送入内存数据段1000H开始的100个单元中,并单步
执行查看每一语句执行后相关寄存器的内容。
4.编辑程序四,练习压栈出栈指令,并单步执行查看每一语句执行后相关寄存器的
内容。
5.编辑程序五,练习交换指令XCHG,并单步执行查看每一语句执行后相关寄存器的
内容。
6.
三、实验步骤
<程序一>
1.编辑程序并命名为。
2.修改寄存器内容,写入文件总字符数.
3.查看程序并进行反汇编(-u)。
4.根据反汇编得到的机器码,用e写入内存。
<程序二>
1.编辑源程序并汇编成目标文件。
2.连接成可执行文件并运行输出结果。
3.检查寄存器内容(-r)。
4.反汇编(-u)。
5.单步调试(-t)。
<程序三>
1.编辑程序,将立即数2AH送入内存数据段1000H开始的100个单元中,并单步执
行。
可以看到mov di,1000mov cx,64mov al,2a执行后,寄存器DI=1000 CX=0064AX=002A,执行inc di,dec cx后,DI,CX里的值分别增加减少1。
2.反汇编(-u)。
3.执行三次mov [di],al后可以看到数据段1000H开始的3个单元中已存在2a。
<程序四>
1.编辑程序并单步执行,可以看到在执行MOV AX,9000MOV DX,38FF MOV
SP,E200后,AX=9000,DX=38FF,SP=E200;
2.PUSH操作后,可以发现SP=SP-2;POP操作后,发现SP=SP+2;根据堆栈的后进先
出的性质,在PUSH DX;PUSH AX后执行POP DX;POP AX,则AX与DX 里的值发生变化,我们可以从最后两个-t操作中发现AX与DX 的变化情况。
<程序五>
1.编辑程序并单步执行,可以看到在执行MOV AX,1000MOV BX,2EFF后,AX=1000,
BX=2EFF;在执行XCHG 后,BX=1000,AX=2EFF。
四、总结与心得
通过五个程序的汇编与执行,已经熟悉了汇编语言源程序书写格式,并熟悉了汇编语言源程序的编辑、汇编、连接、执行的过程,也就是编辑源文件(.asm),汇编(masm)生成目标文件(.obj),连接(link)生成可执行文件(.exe)。通过运用DEBUG练习,已对程序的执行过程有稍许了解,对小型程序直接在DEBUG里汇编,执行,命名,保存也有了初步了解。
通过对程序三、四、五的编辑与单步调试,对命令MOV,XCHG,PUSH,POP有了初步的掌握能力,对单步执行命令t有了更深刻的理解,对各个寄存器的功能的认识进一步加强。
实验中,通过对程序的编辑,对字符串在存储单元的存储情况有了更深刻的认识,如f dw 'ab','c','$',,’ab’是看成一个整体的,’a’就是高字节,高字节放在连续两个字节单元的高地址单元,所以由低到高是42H、41H、43H,所以输出’bac’。同时也了解到db是定义字节型的数据,dw定义字类型数据,dd定义双字类型的数据,lea和offset是取偏移地址,seg 是取段地址。