您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理与接口技术编程指令分析(较详细)要点
微机原理与接口技术期末复习-程序专题-测控122班委会编辑第1页共13页编程指令分析1、求累加器AX和寄存器BX中两个无符号数之差的绝对值,结果送外设2000HMOVCX,AX;保存AXSUBAX,BX;AX-BXAX变了JCAA;CF=1,最高位有借位,AXBX,跳转BB:MOVDX,2000H;外部地址OUTDX,AX;HLT;CPU进入暂停状态。AA:SUBBX,CX;BX=(BX-CX(AX))MOVAX,BXJMPBB3、若在某数据段2000H开始的48个单元中,存放着某班48个同学的数学课考试成绩。试编写程序找出该班的最高分,将其置于BL中MOVCX,2FHMOVSI,2000HMOVBL,[SI]BB:INCSIMOVAL,[SI]SUBAL,BLJCAA;有借位,ALBLMOVBL,[SI];AL=BL,BL=ALAA:LOOPBBHLT4、编程序将内存从4000:0000H到4000:00FFH的每个单元中均写入55HMOVAX,4000HMOVES,AX;段地址赋初值MOVCX,100H;00FFH=100DMOVDI,0H;MOVAL,55HCLDREPSTOSB;HLT(若改为字节操作,则“100H”→128D;“AL,55H”→AX,5555H;STOSB→STOSW)5、从外设500H单元中读取一个字节M,判断其值是否在70H和80H之间,即70H≤M<80H。如果M≥80H,则送0FFH给外设端口502H;如果M<70H,则送00H给外设端口502H;如果70H≤M<80H,则送88H给外设端口502HSTART:MOVDX,500H;端口地址INAL,DX;从外部端口输入内容到ALCLC;清零借位标志CF微机原理与接口技术期末复习-程序专题-测控122班委会编辑第2页共13页CMPAL,70H;AL-70HJCLP1;CF=1有借位,AL70H,转LP1CMPAL,80H;AL=70H,AL-80HJCLP2;70HAL80H,转LP2MOVAL,0FFH;AL=80H,AL=0FFH(第一个16进制数为字母的,前面加0,以区别程序中的变量)LP3:MOVDX,502H;输出端口地址赋到DX中OUTDX,AL;将结果传送到外部端口HLTLP1:MOVAL,00HJMPLP3LP2:MOVAL,88HJMPLP36、设X、Y、Z是三个16位有符号数,存放在@DATA的数据段,寻找最大数,存到MAX单元START:MOVAX,@DATAMOVDS,AX;DS段初始化MOVAX,XCMPAX,YJGEL1;X=Y,转L1MOVAX,Y;X=Y,大数Y赋到AX中L1:CMPAX,Z;AX-Z,JGEL2;AX=Z,转L2MOVAX,Z;AXZ,大数Z赋到AX中L2:MOVMAX,AX;最大数赋到MAX存储单元7、若在3000:3000H和3000:3001H单元有两个无符号数,编一个程序比较它们的大小,把大的数放在3000:3002H单元START:MOVAX,3000HMOVDS,AX;段地址赋初值MOVAL,[3000H];低地址单元内容AL←(DS×16+3000)CMPAL,[3001H];两内容相比较JAEL;(aboveandequal)AL=高XCHGAL,[3001H];AL高的,交换L:MOV[3002H],ALHLT8、设X、Y、Z、W均为存放16位带符号数单元的地址。编写程序段完成下列操作Z←W+(Z-X)MOVAX,Z微机原理与接口技术期末复习-程序专题-测控122班委会编辑第3页共13页SUBAX,X;AX←Z-XMOVDX,WADDDX,AX;DX←DX+AXMOVZ,DXZ←DXHLT9、编写汇编简易程序段,若自BLOCK开始的内存缓冲区中,有100个带符号的数(字为单位),希望找到其中最大的一个值,并将它放到MAX单元中。MOVCX,99;0-99个带字符的数MOVBX,0;起始偏移地址MOVMAX,BLOCK[BX];第一个数放入MAX中LOOP1:MOVAX,BLOCK[BX];BLOCK[BX]放入到AX里CMPAX,BLOCK[BX+2];两个数进行比较JGENEXT;第一个数=第二个数,跳到NEXTMOVMAX,BLOCK[BX+2];第二个数大,就放到MAX里NEXT:ADDBX,2;每次加2LOOPLOOP1★10、试用无条件传送方式分别从1000H、1002H端口读入2个字节后,屏蔽每个字节的低四位,然后将其分别送当前数据段2000H、2001H单元和端口3000H、3002HMOVDX,1000HINAL,DXANDAL,0F0HMOV[2000H],ALMOVDX,3000HOUTDX,ALMOVDX,1002HINAL,DXANDAL,0F0HMOV[2001H],ALMOVDX,3002HOUTDX,ALHLT(若改为1000H~10FFH2562000H~20FFH2563000H~30FFH256则MOVCX,100H;总字节数MOVBX,2000H;目的地址(当前数据段)MOVSI,1000H;原数据地址(也在外部端口)MOVDI,3000H;目的地址(外部端口)L:MOVDX,SIINAL,DX;从外部端口输入数据到ALANDAL,0F0H;保留高四位,低四位清零MOV[BX],AL;处理后的数据送当前数据段地址微机原理与接口技术期末复习-程序专题-测控122班委会编辑第4页共13页MOVDX,DIOUTDX,AL;处理后的数据传送到外部端口地址INCBXINCSIINCDILOOPLHLT★11、试用无条件传送方式将内存数据段中偏移地址为3500H~3502H单元的内容依次送225H~227H端口MOVAL,[3500H];内容的内存地址,传送的是内容MOVDX,225H;目的地址(外部端口)OUTDX,AL;传送到外部端口MOVAL,[3501H]MOVDX,226HOUTDX,ALMOVAL,[3502H]MOVDX,227HOUTDX,ALHLT(若改为5000H~50FFH→200H~2FFH则MOVSI,5000H;原数据初始地址MOVDX,200H;目的端口地址MOVCX,100H;数据个数L:MOVAL,[SI];OUTDX,AL;数据传输到外部端口INCSIINCDXLOOPL★12、设AX寄存器中存放一个16位二进制数,试编写一个程序,统计AX中“1”的个数,统计结果送AX中MOVCX,0;计数器清零LOOP:SUBAX,0;AL-0JZSTP;AL=0,跳转SALAX,1;算术左移一位(到CF里)JNCNOD;CF=0INCCX;CF=1,计数值加一NOD:JMPLOOPSTP:HLT微机原理与接口技术期末复习-程序专题-测控122班委会编辑第5页共13页13、设AX中有一个16位二进制数,试编写程序,统计AX中为“1”的位数,统计的结果送CX中,若为“1”的位数为偶数,则将数据55H写入AXMOVCX,0;计数值清零LOOP:SUBAX,0;AX-0JZSTP;AX=0,1的个数为0,是偶数,转STPSALAX,1;左移一位,最高位进CFJNCNOD;CF=0,最高位不是1,转NODINCCX;最高位是1,计数值加1NOD:JMPLOOPSTP:RCRCX,1JCSTOPMOVAX,55HSTOP:HLT14、若在DAT开始的顺序50个单元中,存放着某班50个同学的数学课考试成绩。试编写程序求该班这门课的平均成绩MOVCX,50;计数初始值MOVSI,DAT;初始地址XORAX,AX;累加器AX清零L:ADDAL,[SI];从第一个开始相加放入AL(8位)中,2为十进制ADCAH,0;取进位,放入AH中(进位值不会超过50(8位))INCSI;地址加一LOOPLMOVBL,50;除数DIVBL;取平均HLT(若改为500个同学,则“50”→500;“BL,50”→BX,500;“BL”→BX;“XORAX,AX”后添加MOVDX,0;“ADCAH,0”后添加ADCDX,0)MOVCX,500;计数初始值MOVSI,DAT;初始地址XORAX,AX;累加器AX清零MOVDX,0L:ADDAL,[SI];从第一个开始相加放入AL(8位)中,2为十进制ADCAH,0;取进位,放入AH中(进位值会超过99)超过8位2进制ADCDX,0;再取进位(一位十进制)INCSI;地址加一LOOPLMOVBX,500;除数DIVBX;取平均HLT15、大小写字母转换已知在以BUF为首地地址的字节存储区中,存放着一个以‘$’作结束标志的字符串,微机原理与接口技术期末复习-程序专题-测控122班委会编辑第6页共13页编写程序,显示该字符串,并要求将小写字母以大写字母形式显示出来。(小写a为61H,大写A为41H。)STUCKSEGMENTDB200DUP(0)STUCKENDSDATASEGMENTBUFDB'addAX,BXsubCX,10MOVdx,1234hEND$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STUCKBEGIN:MOVAX,DATAMOVDS,AX;数据段地址装填(堆栈段地址由系统装填)LEABX,BUF;BUF(存储区域)首地址→BXLOPA:MOVDL,[BX];直接寻址,内容→DLCMPDL,'$';确定没有到最后一个内容JEEXITCMPDL,'a';内容与‘a’比较JBN;DL’a’CMPDL,'z';内容与’z’比较JAN;DL’z’SUBDL,20H;’a’DL’z’,为小写字母,DL-20H,变为大写N:MOVAH,2;显示字符用DOS的2号功能调用INT21H;修改后的内容输出到显示器INCBX;地址值加1JMPLOPAEXIT:MOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN28.编写一个程序,求W=(X2-Y2)/Z,设X、Y、均为一个8位无符号数,运算不考虑溢出。分析:表达式改写为W=(X+Y)(X-Y)/Z,因为表达式简单,根据表达式运算次序来编写程序,由于运算不考虑溢出,所以不考虑(X+Y)>256情况。解:程序清单如下:STUCKSEGMENTPARASTACKDW20HDUP(0)STUCKENDSDATASEGMENTDATXDB80;假定X为80DATYDB50;定义Y的值DATZDB5;定义Z的值微机原理与接口技术期末复习-程序专题-测控122班委会编辑第7页共13页DATWDB?;定义保存计算结果的存储单元DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STUCKBEGIN:MOVAX,DATAMOVDS,AX;数据段地址装填(堆栈段地址由系统装填)MOVAL,DATX;取XADDAL,DATY;计算(X+Y)→(AL)MOVBL,DATX;取XSUBBL,DATY;计算(X-Y)→(BL)MULBL;计算AL×BL→(AX)即(X+Y)×(X-Y)→(AX)MOVCL,DATZ;取ZDIVCL;计算AX/Z→AL即(X+Y)×(X-Y)/Z→ALMOVDATW,AL;保存结果MOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN29.编写一个程序,实现键入任一个字符,显示其十进制的ASCⅡ码(例如:键入A,显示41H)。分析:首先接受一个字符,其ASCⅡ码一定在0~255之间,把二进制的ASCH码转换为十进制后输出即可。转换的算法是:用该数除以100,商是二进制的百位;再把余数除以10,商是二进制的十位;余数是二进制的个位。二进制的百位、十位、个位加上30H即为字符的百位、十位、个位,然后输出即可。解:程序清单如下:CODESEGMENTASSUMECS:CODESTART:MOVAH,1INT21H;读一个按键MOVAH,0;准备做AX/100,所以要把AH清0MOVBL,100;除法指令
本文标题:微机原理与接口技术编程指令分析(较详细)要点
链接地址:https://www.777doc.com/doc-4012324 .html