1、微机原理实验报告清零程序竭诚为您提供优质文档/双击可除微机原理实验报告清零程序篇一:微机原理实验报告微机原理与应用课程实验报告实验分工:报告人同组人实验时间:20XX.12.10课程设计一、题目要求(1)在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数150共16个字节的数据;(2)将上述源区内容传送到目的内存区2(首址为1100h)中;(3)检验上述传送过程是否正确,如有错误,在紧跟内存区2后的第一个字节开始写入AscII码“eRRoR”,否则写入“oK”。(4)用冒泡法将上述内存区2的数据,按从小到大的次序重新排列,排列后存放在内存区3(开始地址为2100h)。(5)
2、将上述内存区2和内存区3的第100个数据分别乘以2,并转为bcD码,保存在各自存储区的末尾。再将上述两个bcD码相乘,其结果保存在内存区1的末尾处。二、实验程序框图三、程序代码codesegmentassumecs:codeDATA1db16dup(?)DATA2dbeRRoRDATA3dboK;在数据段首址为0100h开始的内存区1按从大到小的顺序顺次存入二进制数150共16个字节的数据start:movax,0100h;规定目标程序存放单元的偏移量movds,ax;数据段地址moves,axmovsi,offsetDATA1;偏移地址movcx,0010h;循环次数movbx,0100hm
3、oval,ofhs1:movcs:si,almovbx,cs:siincsiincbxdecalloops1nop;将内存区1数据搬移到内存区2中movcx,16movsi,0100hmovbx,1100hs2:moval,simovbx,alincbxloops2nop;对比内存区1的数据与内存区2的数据是否相同movcx,16movsi,0100hmovbx,1100hcomp:movax,simovdx,bxcmpax,dxjneerroincsiincbxloopcomp;数据如果都相同,说明上述传输过程正确movsi,offsetDATA3movdi,1110hmovbl,0movc
4、x,2enteroK:movbl,cs:simovdi,blincsiincdiloopenteroKnopjmps3;如果有一个数据不相同,说明上述传输过程不正确err:movsi,offsetDATA2movdi,1110hmovbl,0movcx,5entereRR:movbl,cs:simovdi,blincdiloopentereRR;将内存区2数据搬移到内存区3中s3:movsi,1100hmovcx,0010hmovbx,2100hmoval,0movcx,16fil:moval,simovbx,alincsiincbxloopfilnop;用冒泡法将内存区3的数据按从小到大重新
5、排列s4:movbl,0movcx,16movsi,2110hdecsideccxagain:moval,sicmpal,si-1jaenextxchgal,si-1movsi,almovbl,1next:decsiloopagaincmpbl,0jnestart1nopmovsi,1109hmoval,simovcl,2mulcl;结果在al中movdx,0movbx,10divbxshlal,4addal,dl;把二进制数转换成bcD码mov1112h,almovsi,2109hmoval,simovcl,2mulcl;结果在al中movdx,0movbx,10divbxshlal,4ad
6、dal,dl;把二进制数转换成bcD码mov2110h,al;两个bcD码相乘,其结果保存在内存区1的末尾处。movsi,1112hmovah,simovcl,4shrah,clmoval,ahmovdl,10muldl;结果在al中movdl,si篇二:微机原理实验报告华北电力大学科技学院课程名称:微机原理实验学生姓名:牛玺童班级:电气学号:实验报告11k6111904010415实验一数据转换实验一、实验目的(1)初步掌握在pc机上建立、汇编、链接和运行8086/88汇编语言程序的过程。(2)通过对两个验证性试验的阅读、调试、掌握不同进制数及编码相互转换的程序设计方法。(3)完成程序设计题
7、,加深对数码转换的理解,了解简单程序设计方法。二、实验内容1.十六进制数转换为AscII码设二字节十六进制数存放于其实地址为3500h的内存单元中,把他们转换成AscII码后,再分别存入起始地址为350A的四个内存单元中。从书上AscII码表中可知十六进制数加30h即可得到0h9h的AscII码,而要得到AhFh的AscII码,则需再加7h。请根据所给流程图理清思路,总结出对应的若干要点。将流程图与参考程序相互。根据分析的结果将运行时内存的变化列写出来。学习并使用mAsm或wAVe仿真软件分析程序运行过程中相关寄存器及相应内存的变化情况来验证自己的猜想,以巩固命令的学习,提高编程能力。1.1程
8、序流程图图1-1-11.2实验程序DATAssegmenT;此处输入数据段代码DATAsenDssTAcKssegmenT;此处输入堆栈段代码sTAcKsenDscoDessegmenTAssumecs:coDes,Ds:DATAs,ss:sTAcKssTART:moVAx,DATAsmoVDs,Ax;此处输入代码段代码moVcx,0004h;根据转换个数设定循环次数;(两字节十六进制数如6b2c对应有四个用十六进制表示的AscII码表示,即四个字节)moVDI,3500h;指向该两字节十六进制数起始地址,此时在调试窗口修改内存字节moVDx,DI;将地址3500h中的内容(6b2c)给DxA
9、1:moVAx,Dx;第一次时Dx=6b2c,;因为想顺序取c、2、6、b,所以需要一个中间变量AnDAx,000Fh;取低四位,第一次取到c,cmpAL,0Ah;判断AL属于09,还是AFJbA2;如果是09,则跳转到A2ADDAL,07h;若属于AF,再加上07h后也是再加上30h即得到转换。A2:ADDAL,30h;09的AscII码对应的十六进制比其;本身(注意:亦是十六进制)大30hmoVDI+0Ah,AL;将转码后的c,即43h给350AIncDI;将DI指向下一字节,用于存储转码后的值,第一次自增后要存?2?pushcx;功能是接下来要用到cx作为一个中间变量,;而刚才已经使用并
10、且接下来还会用到cx的值,;也可以不用cx,用其他不用的寄存器或者直接立即数形式的。moVcL,04h;若直接用立即数,可能不稳定,(原因不详)用一个中间变量。shRDx,cL;右移四位,如第一次转码后,Dx=6b2c,;为下一次取低四位的2做好前提,将0010b移到低四位popcx;执行完后,cx又用于计数LoopA1;每一次转码后,执行完此句后,cx的值都要变化,;分别是3,2,1,0;正好四次。moVAh,4chInT21hcoDesenDsenDsTART1.3实验过程与心得1.3.1编程要点1.数据在内存空间中的存储情况要清晰;图1-1-2图1-1-3如上图所示图1-2为处理前的存储
11、情况,通过调试中的内存修改来实现并检查,图1-3为最后期待的转码结果,通过查询内存来检查。2.基本功能的实现:分两种情况去转码。中间涉及到比较选择语句,可以通过标志位来理解学习Jb的实现条件是由于标志位的变化。3.取与存两个“指针”的变化篇三:微机原理软件实验报告信息与通信工程学院微机原理软件实验报告班级:姓名:班内序号:学号:日期:实验一Debug的使用一、实验目的:1.掌握汇编程序的编辑,编译,连接和执行的全过程;2.学习和掌握用Debug调试程序的方法.二、实验内容:1.用编辑软件,输入以下汇编语言源程序:DATsegmenTADb20;(自定)bDb15;(自定)YDb3Dup(0)Z
12、Db0,0DATenDssTAsegmenTsTAcKDw50Dup(?)sTAenDscoDsegmenTAssumecs:coD,Ds:DATsTARpRocFARpushDsxoRAx,AxpushAxmoVAx,DATmoVDs,AxmoVAx,sTAmoVss,AxmoVAL,AmoVZ,ALmoVZ+1,ALcALLsub1moVAL,bmoVZ,ALmoVZ+1,ALcALLsub1moVAL,AmoVZ,ALmoVAL,bmoVZ+1,ALcALLsub1ADDwoRDpTRY,AxADcbYTepTRY+2,0sTARenDpsub1pRocmoVAL,ZmoVAh,Z+1m
13、uLAhADDwoRDpTRY,AxADcbYTepTRY+2,0ReTsub1enDpcoDenDsenDsTAR2.通过编译,连接形成可执行文件.3.用Debug将可执行文件调入,并进行调试.(1)用D命令观察数据区在内存中的具体内容,记录单元A和b的具体地址.(2)用u命令对目标代码反汇编,观察反汇编后的结果.注意发现源程序的起始位置,并记录这个起始地址.(3)用T命令作单步跟踪调试.比较每条指令执行后的结果和原来的理解是否一致.得出程序运行的结果:它们是写在什么单元,具体内容是什么;并判断结果是否正确.(4)在子程序sub1的入口处设一断点,用g命令执行程序.在断点处观察堆栈的内容,比
14、较堆栈的内容和程序返回地址是否一致.(5)用e命令修改单元A,b的内容,重新执行程序,并记录结果.(6)用m命令和A命令对程序进行修改:将主程序中最后两条指令(ADD和ADc)修改为一条cALLsub1指令,重新执行程序.(7)退出Debug.4.重新使用编辑软件,把源程序最后一句中的sTAR去掉.再次生成可执行文件,并用Debug调入内存.当使用u命令时,显示的结果与前一次(未加sTAR)的结果有何不同?三、预习题:1.熟悉常用的Debug命令.2.阅读并分析程序的功能.3.若ss=2000h,sp=FFFFh,向堆栈中压入4字节数据后,如何用D命令显示压入堆栈的内容?答:使用debug指令
15、“d2000:0000”即可显示压入堆栈的内容,这是因为sp+1会溢出,变成0000。四、实验过程如上图,通过masm和link命令程序编译连接成功。进入debug中,用u命令查看反编译结果。得出A的地址为:0b88:0000,值为1bh,即十进制的27D;b的地址为:0b88:0001,值为33,即十进制的51D。Y的偏移地址为0002h,Z的偏移地址为0005h。DATA段基地址为0b88h。sub1子程序段入口地址为003F。如上图所示,用e命令将A和b的值由1eh,33h改为10h,20h,通过d命令重新查看A,b的数值,发现改变成功。通过u命令查看反汇编结果,在cALLsub1即cALL003F处设置一个断点,单步调试。上图为用t命令单步运行结果,执行sub1之后返回主程序时cs为0b88,Ip为001A,压入堆栈的Ip值已经弹出,cs,Ip已经指向下一条指令。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1