您好,欢迎访问三七文档
实验一拆字、拼字程序一、实验目的1.掌握屏蔽一个字节中的高四位或低四位内容的方法,熟悉移位指令的用法。2.掌握汇编语言设计和调试方法。二、实验条件与内容实验条件:1.PⅡ以上的PC计算机,及操作系统WindowsXP。2.MasmforWindows集成实验环境V6.0版本。实验内容:(1)把4000H单元的内容拆开,高位送4001H低位,低位送4002H低位,4001H、4002H的高位清零,一般本程序用于把数据送显示缓冲区时用。(2)把4000H、4001H的低位分别送入4002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。三、程序框图拆字程序框图拼字程序框图四、实验过程与步骤在汇编语言环境下分别将拆字程序和拼字程序进行录入,并对程序进行编译。在DEBUG下对程序分别进行调试:(1)在程序运行前,检查4000H~4002H中内容情况。(2)用连续或单步方式运行程序,之后检查4000H~4002H内容变化情况。思考题1.MOV指令在应用时应注意哪些事项?2.单字和双字在存储器中是怎样存放的?请举例进行说明。拆字程序清单:CODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVBX,4000H;把地址单元4000H给BX寄存器MOV[BX],5BH;把所要拆字内容置为5BHMOVAL,[BX];把4000H单元的内容给ALMOVAH,AL;再4000H单元的内容给AHMOVCL,04;设置移位次数为4SHRAH,CL;AH的内容右移4位ADDBX,01(或INCBX);地址单元加1MOV[BX],AH;把高位字送给4001H单元ANDAL,0FH;屏蔽掉AL中的高四位ADDBX,01(或INCBX);地址单元加1MOV[BX],AL;把低位字送给4002H单元HLTCODESENDS;程序结束ENDSTART此程序运行的结果是:(用DDS:4000)13C9:40005B050B0000……拼字程序清单:CODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVBX,4000H;把地址单元4000H给BX寄存器MOV[BX],0F6H;把4000H单元所要拼的字置为F6HMOV[BX+1],28H;把4001H单元所要拼的字置为28HMOVAH,[BX];把4000H单元的内容给AHMOVAL,[BX+1];把4001H单元的内容给ALANDAL,0FH;屏蔽掉AL中的高四位MOVCL,4;设置移位次数为4SHLAL,CL;AL的内容左移4位ANDAH,0FH;屏蔽掉AH中的高四位ORAL,AH;进行拼字INCBX;地址单元加1MOV[BX],AL;将拼好的字保存在4002H单元HLTCODESENDS;程序结束ENDSTART此程序运行的结果是:(用DDS:4000)13C9:4000F628680000……思考题1.MOV指令在应用时应注意哪些事项?答:①MOV指令的目的操作数不允许用立即数方式;②MOV指令的目的操作数不允许用CS寄存器;③除源操作数为立即数的情况外,两个操作数中必须有一个是寄存器;④不允许MOV指令在两个存储单元之间直接传递数据;⑤不允许在两个段寄存器之间直接传递信息;⑥MOV指令使用操作数为段寄存器、或地址单元不能为非法数;⑦MOV指令不影响标志寄存器FLAG中的标志位。1.单字和双字在存储器中是怎样存放的?请举例进行说明。答:在16位计算机中,单字是由2个字节构成的。当一个整数字保存在存储器中时,这两个字节是按相反的顺序存储的。首先存储的是低有效字节,再把高有效字节存储在下一个地址。也就是说低位字节存储在低地址,高位字节存储在高地址。例如:3456H在存储器地址(0000、0001)中是这样存放的:地址单元:000034H(数值)000156H双字是32位宽、4个字节,并且是由两个连续存储的相邻的字组成的,这是非常重要的数据格式。双字的存储与单字存储的方法相似,即低位字存放在较低的存储器地址单元,高位字存放在下一个较高的存储器地址单元。例如11223344H存放形式:地址单元:000044H(数值)000133H001022H001111H实验二数据区移动与分支程序一、实验目的1.掌握RAM中的数据相关操作的方法与指令。2.掌握分支结构编程方法及条件转移指令的用法。二、实验条件与内容实验条件:1.PⅡ以上的PC计算机,及操作系统WindowsXP。2.MasmforWindows集成实验环境V6.0版本。实验内容:1、把4100H源RAM区首址内的16字节数据传送到4200H目标RAM区。2、假设有一组数据为5,-4,0,3,100,-51。请编程判断:每个数大于0,等于0,还是小于0,并输出其判断结果。即:1当x0y=0当x=0-1当x0数据区移动设计思想程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储器中可能有三种情况,如下图:对于两个数据块分离的情况,如图4-1所示。数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。可以得出以下结论:当源数据首址>目的块首址时,从数据块首址开始传送数据。当源数据块首址<目的块首址时,从数据块末地址开始传送数据。四、程序框图见该实验程序流程框图。五、实验过程及步骤实验1在汇编语言环境下输入该实验上机程序,并对程序进行编译。对程序分别进行调试:(1)在程序未运行前,检查4100H~4110H、4200H~4210H中的内容情况。(2)用单步或用断点方式运行程序,检查检查4100-410FH中内容是否和4200-420FH中内容完全一致。实验2实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。编程提示:1.首先将原始数据装入起始地址为XX的字节存储单元中。2.将判断结果以字符串的形式存放在数据区中,以便在显示输出时调用。3.其中判断部分可采用CMP指令,得到一个分支结构,分别输出“y=0”,“y=1”,“y=-1”。4.程序中存在一个循环结构,循环6次,调用6次分支结构后结束。思考题1.在分支程序设计中,怎样才能形成条件、构成分支?2.条件转移指令有哪三种类型?根据三种类型将下面指令进行分类。数据区移动实验的上机程序清单:CODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVCX,010H;置搬移数据循环次数MOVSI,4100H;置源数据块首址MOVDI,4200H;置目的数据块首址MOVBX,SI;将源数据块首址给BXNUM:MOV[BX],0FFH;将16个数据存放在INCBX源数据块区LOOPNUMMOVCX,010H;置搬移数据循环次数CMPSI,DI;SI与DI相比较JAL2;SIDI跳转到L2处ADDSI,CX;SI与CX相加ADDDI,CX;DI与CX相加L1:DECSI;置源数据块末地址DECDI;DI减1,置目的数据块末地址MOVAL,[SI];把源数据块末地址的数据搬移到目的数据块区域MOV[DI],ALLOOPL1;循环16次结束JMPHEND;跳转到结束L2:MOVAL,[SI];把源数据块存储单元的数据传送到目的数据块MOV[DI],ALINCSI;源数据块地址增1INCDI;目的数据块地址增1LOOPL2;数据搬移16次后结束HEND:HLTCODESENDS;程序结束ENDSTART分支程序清单:DATASSEGMENTXDB25,-4,0,3,100,-51,17,62;建立数据表YDB;为存储结果建立缓冲区DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AX;置数据段存放地址XORAX,AX;对AX清零MOVCX,6;设定循环控制数LEASI,X;置数据表偏移量首址LEADI,Y;置存储数据偏移量首址BJ:MOVAL,[SI];将第一个数给ALCMPAL,0;AL内容与0进行比较JGEDY;比较结果=0则转移到DY处XY0:MOVBL,-1;小于0将-1给BLMOV[DI],BL;将-1存储到地址单元JMPXH;跳转到XH处DY:JEXD;若等于0转移到XD处MOVBL,1MOV[DI],BL;将1给BL且存储到地址单元JMPXH;跳转到XH处XD:MOVBL,0;给BL赋值为0MOV[DI],BL;将0存储到地址单元XH:INCSI;数据表偏移地址增1INCDI;存放结果数据偏移地址增1LOOPBJ;判断CX是否为0,是则结束,否则进行循环HLTCODESENDS;程序结束ENDSTART实验三循环程序设计一、实验目的1.掌握循环程序设计的方法(两重性循环结构)2.掌握正确分配与使用寄存器。二、实验内容与要求以GRADE为首地址的10个字的数组中保存有学生成绩。建立一个10个字的RNAK数组,并根据GRADE中的学生成绩将学生名次填入RANK数组中(提示:一个学生的名次等于成绩高于等于该学生的人数加1)。寄存器分配情况说明如下:AX存放当前被测学生的成绩BX存放当前被测学生的相对地址指针CX内循环计数值DX存放当前被测学生的名次计数值SI内循环测试时的地址指针DI外循环计数值三、程序框图见图6-1所示。四、实验报告及要求(一)预习准备部分1.预习本次实验指导书中一、二、三部分内容。2.按照实验内容要求写出程序清单。(二)实验过程部分1.写出上机调试后正确的程序,说明程序的功能、结构。2.调试说明,包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3.写出源程序执行的结果。思考题在循环程序设计中,循环初始化时应注意哪些问题?按要求编程,计算学生排名,并输出排名结果:DATASSEGMENTGRADEDB95,84,72,58,76,90,100,68,80,88;建立学生成绩表RANKDB10DUP(?);建立学生成绩名次的缓冲区KGDB‘’,‘$’;显示两个空格DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;分配数据段地址XORAX,AX;对AX清零MOVDI,0;对DI置0;置学生成绩表首址WXH:MOVAL,[BX];将第一个学生成绩给AX;将学生名次先置为1;设置循内环计数值MOVSI,OFFSETGRADE;取比较学生成绩的第一个数NXH:CMPAL,[SI];两个学生成绩相比较JAENEXT;若高于等于则跳转到NEXT处;否则学生名次增1NEXT:INCSI;取下一个相比较的学生成绩;判断CX是否为0;将学生名次存入地址单元INCBX;取下一个学生的成绩INCDI;外循环控制次数增1;外循环次数是否到10JBWXH;不到10进行循环,到10后结束;设置显示名次缓冲区首址MOVCX,10;设置显示控制循环次数为10XS:;将显示的名次给ALCMPAL,0AH;名次与0AH(10)比较JWEDY;高于等于转移到DYADDAL,30H;转换成ASIIC码进行输出显示;显示名次JMPKGF;跳转到显示空格处DY:;大于等于A的进行转换,并显示MOVDL,ALMOVAH,02INT21HKGF:LEADX,KG;显示空格字符串INT21HLOOPXSHLTCODESENDS;程序结束ENDSTART实验四244/273基本接口I/O实验一、实验目的1.学习微机接口控制系统中扩展简单I/O口的方法。2.学习数据输入/输出程序的编制方法。二、实验条件1.PC计算机及操作系统WindowsXP/Win7。2.微机实验系统(简称实验箱)以及连接线
本文标题:微机实验指导
链接地址:https://www.777doc.com/doc-3154000 .html