您好,欢迎访问三七文档
实验一两个多位十进制数相减实验一.实验要求将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。二、实验目的1.学习数据传送和算术运算指令的用法。2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。DATASEGMENTDATA1DB33H,39H,31H,37H,38H;第一个数据(作为被减数)DATA2DB36H,35H,30H,38H,32H;第二个数据(作为减数)MES1DB'-','$'MES2DB'=','$'DATAENDSSTACKSEGMENT;堆栈段STADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVSI,OFFSETDATA1MOVBX,05CALLDISPL;显示被减数MOVAH,09HLEADX,MES1INT21HMOVSI,OFFSETDATA2MOVBX,05;显示减数CALLDISPLMOVAH,09HLEADX,MES2INT21HMOVSI,OFFSETDATA1MOVDI,OFFSETDATA2CALLSUBA;减法运算MOVSI,OFFSETDATA1MOVBX,05;显示结果CALLDISPLMOVDL,0DHMOVAH,02HINT21HMOVDL,0AHMOVAH,02HINT21HINT21HMOVAX,4C00HINT21HDISPLPROCNEAR;显示子功能DSI:MOVAH,02MOVDL,[SI+BX-1];显示字符串中一字符INT21HDECBX;修改偏移量JNZDSIRETDISPLENDPSUBAPROCNEARMOVDX,SIMOVBP,DIMOVBX,05SU1:SUBBYTEPTR[SI+BX-1],30HSUBBYTEPTR[DI+BX-1],30HDECBX;将ASCII码表示的数字串JNZSU1;转化为十六进制的数字串MOVSI,DXMOVDI,BPMOVCX,05;包括进位,共5位CLC;清进单位SU2:MOVAL,[SI]MOVBL,[DI]SBBAL,BL;带进位相减AAS;非组合BCD码的减法调整MOV[SI],AL;结果送被减数区INCSIINCDI;指向下一位LOOPSU2;循环MOVSI,DXMOVDI,BPMOVBX,05SU3:ADDBYTEPTR[SI+BX-1],30HADDBYTEPTR[DI+BX-1],30HDECBX;十六进制的数字串转化ASCII码表示的数字串JNZSU3RETSUBAENDPCODEENDSENDSTART实验二两个数相乘的实验一.实验要求实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,算式结果在屏幕上显示出来。二.实验目的掌握乘法指令和循环指令的用法。DATASEGMENTDATA1DB32H,39H,30H,35H,34HDATA2DB34HMES1DB'*','$'MES2DB'=','$'RESULTDB6DUP(00H)DATAENDSSTACKSEGMENTSTADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,TOPLEASI,DATA1MOVBX,05HL1:MOVAH,02HMOVDL,[SI+BX-1]INT21HDECBXJNZL1MOVAH,09HLEADX,MES1INT21HLEASI,DATA2MOVAH,02HMOVDL,[SI]INT21HMOVAH,09HLEADX,MES2INT21HMOVSI,OFFSETDATA2;显示算式MOVBL,[SI];乘数DATA2→BLANDBL,00001111B;屏蔽高4位,ASCII码转化为十六进制数MOVSI,OFFSETDATA1MOVDI,OFFSETRESULTMOVCX,05LOOP1:MOVAL,[SI]ANDAL,00001111B;取被乘数DATA1,ASCII变十六进制数INCSI;指向被乘数1的下一字符单元MULBL;相乘AAM;AAM调整ADDAL,[DI];结果低位与前次计算的进位相加AAA;AAA调整MOV[DI],ALINCDI;结果送存到下一单元MOV[DI],AHLOOPLOOP1;计算结果高位进位送存MOVCX,06MOVSI,DIDISPL:MOVAH,02MOVDL,[SI]ADDDL,30HINT21HDECSILOOPDISPL;显示结果MOVAX,4C00HINT21H;结束CODEENDSENDSTART实验三BCD码相乘的实验一.实验要求实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式存放,各占一个内存单元,乘积存入在另外两个内存单元中,由于没有组合的BCD码乘法指令,程序中采用将乘数1作为计算器,累加另一个乘数的方法得到计算结果。二.实验目的掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。DATASEGMENTFIRSTDB99HSECONDDB25HTHIRDDB2DUP(?)MES1DB'*','$'MES2DB'=','$'DATAENDSSTACKSEGMENTPARASTACK'STACK'STAPNDB100DUP(?)TOPEQULENGTHSTAPNSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVBL,FIRST;被乘数送BLMOVCL,SECOND;乘数送CLMOVDX,0;部分积清0MOVAL,BLAGAIN:ORAL,ALJZDONE;被乘数减到0则转结果显示MOVAL,DLADDAL,CLDAA;乘数于部分积低位相加后调整MOVDL,ALMOVAL,DHADCAL,0DAA;往部分积高位送进位后调整MOVDH,ALMOVAL,BLDECALDAS;组合BCD码减法调整MOVBL,ALJMPAGAINDONE:LEABX,THIRDMOV[BX],DXLEASI,FIRSTCALLDISXORAX,AXMOVAH,09HLEADX,MES1;*INT21HLEASI,SECONDCALLDISXORAX,AXLEADX,MES2;=MOVAH,09HINT21HLEASI,THIRDINCSICALLDISDECSICALLDISMOVAX,4C00H;返回DOSINT21HDISPROCNEAR;显示子程序MOVAL,[SI]MOVCL,04HSHRAL,CLADDAL,30HMOVDL,ALMOVAH,02HINT21HMOVAL,[SI]ANDAL,0FHADDAL,30HMOVDL,ALMOVAH,02HINT21HRETDISENDPCODEENDSENDSTART实验一双色灯实验一、实验要求编写程序,以8255为输出口,控制四个双色灯按要求发光。二、实验目的1.学习单板方式下扩展简单I/O接口的方法以双色灯的使用。2.进一步学习微处理器的编程技术。三、实验电路连线8255的CS片选接至适配板上138译码处的200H~207H插孔。四、实验说明1、因为本实验是模拟交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态,东西绿灯通车,南北灯灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。2、双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。;实验一双色灯实验D1EQU10HD2EQU200HDATASEGMENTPBDB?DATAENDSSTACKSEGMENTSTACKSTADW50DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:PUSHCSPOPDSMOVDX,203H;设置为全输出MOVAL,80HOUTDX,ALMOVDX,200HMOVAL,0ffhOUTDX,AL;清LEDMOVDX,200HMOVAL,0F0HOUTDX,AL;全红MOVBX,7fHCALLDLYBG:MOVAL,01011010B;南北绿,东西红OUTDX,ALMOVBX,D2CALLDLYMOVCX,03HXH1:ANDAL,0F5H;绿灭黄亮OUTDX,ALMOVBX,D1CALLDLYORAL,0aH;绿亮OUTDX,ALMOVBX,D1CALLDLYLOOPXH1ORAL,0a0H;南北黄OUTDX,ALMOVBX,D1CALLDLYMOVBX,D1CALLDLYMOVAL,10100101B;南北红,东西绿OUTDX,ALMOVBX,D2CALLDLYMOVCX,03XH2:ANDAL,0FaHOUTDX,ALMOVBX,D1CALLDLYORAL,05HOUTDX,ALMOVBX,D1CALLDLYLOOPXH2ORAL,50HOUTDX,ALMOVBX,D1CALLDLYMOVBX,D1CALLDLYJMPBGDLYPROCNEARPUSHCXDDD:MOVCX,2ffHCCC:LOOPCCCDECBXCMPBX,0JNEDDDPOPCXRETDLYENDPCODEENDSENDSTART实验二开关状态显示实验一、实验要求编写程序,设定8255的PA口为开关量输入,PB口为开关量输出,要求能随时将PA口的开关状态通过PB口的发光二极管显示出来。二、实验目的学习使用8255各个口的不同工作方式三、实验电路连接将K1~K8用连接至8255的PB0~PB7,将DL1~DL8用连线连至8255的PC0~PC7,8255CS连至译码处的200~207插孔。四、实验说明本实验要求8255工作方式0,PB口设置为输入,PC口设置为输出,输入量为开关量,通过8255可实时显示在LED灯上。按下HALT或RST键则返回监控。;实验二开关状态显示实验STACKSEGMENTSTACKSTADW50DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVDX,203H;设置为b口输入,c口输出MOVAL,92HOUTDX,ALBG:MOVDX,201H;将b口状态从c口输出INAL,DXMOVDX,202hOUTDX,ALJMPBGCODEENDSENDSTART实验五A/D转换实验一、实验要求编程用查询方式采样电位器输入电压,并将采样到的结果实时地通过8279显示在数码管上。(只须显示一位即可。用0~F表示0~+5V电压)。二.实验目的1.掌握A/D芯片AD0809的转换性能及编程方法。2.学习A/D芯片与其他芯片(如8279)接口的方法,初步建立系统的概念。三.实验电路及连线CS79接译码处210~217这个插孔。A/D的CS插译码处208~20F这个插孔,0809的IN0接至电位器W1的中心抽头插孔。注意:电位器W1两边的两个插孔已经分别接好电源+5V和地,请不要再接,以防接错,出现短路。四、实验说明本实验中所用A/D转换芯片为逐
本文标题:微机原理实验1
链接地址:https://www.777doc.com/doc-6110317 .html