资源描述:
《汇编语言实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验1查看CPU和内存,用机器指令和汇编指令编程1.预备知识:Debug的使用2.实验任务(第45页)(1)已跟踪执行(2)(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。此生产日期不能被改变,因为其具有‘只读’属性。(4)通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输出到屏幕上。(4)实验2用机器指令和汇编指令编程1.预备知识:Debug的使用2.实验任务(第71页
2、)(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。从第一空开始依次如下:ax=5BEAax=5CCAbx=30F0bx=6022sp=FE220FE5CCAsp=FC220FC6022sp=FE6022sp=100H5CCAsp=FE220FE30F0sp=FC220FC2F32说明:此题可能因机子软、硬件环境不同而导致答案不一致!(2)仔细观察图3.19的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?答:因为用T指令进行调试时,会产生中断。而为了保护现场,C
3、PU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。实验三汇编语言程序的调试与运行1.将下面的程序保存为t1.asm文件,生成可执行文件t1.exe;assumecs:codesgcodesgsegmentmovax,2000hmovss,axmovsp,0addsp,4popaxpopbxpushaxpushbxpopaxpopbxmovax,4c00hint21hcodesgendsend1.用Debug跟踪t1.exe的执行过程,写出每一步执行后相关寄存器中的内容1.PSP的前两个字节是CD20,用Deb
4、ug加载t1.exe,查看PSP的内容程序段前缀PSP格式:偏移字节数说明000002中断20H000202以节计算的内存大小(利用这个可看出是否感染引导型病毒)000401保留000505至DOS的长调用000A02INT22H入口IP000C02INT22H入口CS000E02INT23H入口IP001002INT23H入口CS001202INT24H入口IP001402INT24H入口CS001602父进程的PSP段值(可测知是否被跟踪)001814存放20个SOFT号002C02环境块段地址(从中可获知执行的程序名)0
5、02E04存放用户栈地址指针00321E保留005003DOS调用(INT21H/RETF)005302保留005507扩展的FCB头005C10格式化的FCB1006C10格式化的FCB2007C04保留008080命令行参数长度(不包含总为最后的0D)及参数也是程序运行期间缺省的DTA实验四[bx]和loop指令的联合使用1.编程:向内存0:200~0:23F依次传送数据0~63assumecs:codecodesegmentmovax,0020hmovds,axmovbx,0movdl,0movcx,40hs:mov[b
6、x],dlincbxincdlloopsmovax,4c00hint21hcodeendsend1.编程:向内存0:200~0:23F依次传送数据0~63,程序中只能使用9条指令(包括程序的2条返回语句)assumecs:codecodesegmentmovax,0020hmovds,axmovbl,0movcx,64s:mov[bx],blincblloopsmovax,4c00hint21hcodeendsend1.下面程序的功能是将“movax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结
7、果。assumecs:codecodesegmentmovax,code//或者是csmovds,axmovax,0020hmoves,axmovbx,0movcx,18hs:moval,[bx]moves:[bx],alincbxloopsmovax,4c00hint21hcodeendsend注意事项:1.因为要复制的数据是代码段的一部分指令,那么要复制的数据的段地址就和代码段的段地址相同。2.因为要复制的数据是代码段的一部分指令,所以要复制的数据的长度,就是要复制的指令的长度,可以先假设要复制8位[1h~0ffh]数据的
8、字节数(如:10h),把程序补全,以便通过编译。将程序补充完整并将其编译、连接、运行,接着进行DEBUG,在DEBUG时我们可以算出该程序的长度。然后得到正确的值后重新将程序补充完整。(1)复制的是什么?从哪里到哪里?答:复制的是代码的二进制数据,从CS:0到ES:0。(2)