微机原理与接口技术实验实验名称:数码转码编程及程序调试学院电子与信息学院专业班级电子类联合班学生姓名王金龙学生学号201430260419实验日期2016年4月20日一.实验目的1.掌握不同进程数及编码相互转换的程序设计方法,加深对数码转换的理解;2.进一步熟悉键盘使用方法;3.进一步熟悉调试程序的方法。二.实验设备装有汇编软件的IBMPC机一台三.实验内容及步骤计算机输入设备输入的信息一般ASCII码或BCD码表示的数据或字符,CPU处理信息一般均用二进制数进行计算或其它处理,处理结果输出的外设有必须一外设的要求变为ASCII码,BCD码或七段显示码等。因此,在应用软件中各累数制的转换和代码的转换是必不可少的。计算机于外设间的数码转换关系如图2-1所示,数码对应关系如表2-1所示。1.将ASCII码表示的十进制数转换为二进制数十进制数可表示为:lnllnnnnDDDD10*10*...10*10*600011LD代表十进制1,2,3,···9,0;((...(10*0lnllD012110*)...10*)10*)10*DDDDDnnln由式(2)可归纳十进制数转换为二进制数的方法:从十进制的最高位Dn开始作乘10加次位的操作,将结果再乘10再加下一个次位,如此重复,则可求出二进制的数结果来。程序流程图如图2-2。这里我们规定:被转换的ASCII码十进制数存放在3500h~3504h单位中。而转换结果在3510~3511单位中.实验步骤(1)输入程序并检查无误。(2)在3500~3504h单元存入十进制12的ASCII码,即e3500,并输入3030303132。(3)g=2000,运行程序,并用CTR+C来中断程序返回监控态。(4)用d3510查看结果,应为35100C00(5)反复试几组数,考查程序的正确性。实验流程图如下:代码和运行结果:DATASEGMENTORG3500HXDB'0','1','2','3','4'//初始化数据DATAENDS//定义数据段CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0MOVCX,05H//定义循环次数MOVDI,3500H//表明地址偏移量MOVBX,0AH//十进制数10MOVDH,00HMOVDL,DS:[DI]//取数SUBDL,30HNEXT:MULBXMOVDL,DS:[DI]SUBDL,30HADDAX,DXINCDILOOPNEXT//代码循环,直到寄存器CX值为0MOVDS:[3510H],AX//存储最后结果CODEENDSENDSTARTEND实验结论:我在3500~3504h单元存入十进制数1234的ASCII码,在3510h单元存储的结果是04D2,与理论结果一样。2将从键盘输入的五位十进制数的ASCII码已存在3500起始的内存单元中。把它转换成BCD码后,再按位分别存入350A起始的内存单元内。若输入的不是十进制的ASCII码,则显示FF.实验步骤:(1)输入程序并检查无误。(2)在3500~3504H单元存入五位十进制数的ASCII码,即e3500并输入31,32,33,34,35。(3)G=2000,运行以上程序。(4)D350A,显示结果为:0000:350A01020304CC…(5)反复试几组数,考查程序的正确性。实验流程图如下:代码和运行结果:ASSUMECS:CODECODESEGMENTSTART:MOVSI,3500HMOVDI,350AHMOVBX,0009HMOVCX,0005HMOVAH,00L:MOVAL,[SI]SUBAL,30HJSFALSECMPBL,ALJSFALSETRUE:MOV[DI],ALJMPNEXTFALSE:MOVAL,0FFHMOV[DI],ALNEXT:INCDIINCSILOOPLINT3CODEENDSENDSTART我们如果输入:3132333435,输出0102030405,可见输出结果正确。我们如果输入:3140293036,输出01FFFF0006,可见输出结果正确。3.将十六位二进制数转换为ASCII码表示的十进制数。十六进制数的值域为0~65535,最大可转换为五位十进制数。实验步骤(1)输入程序并检查无误。(2)在3500~3501H单元中存放0C00,运行程序并检查结果,应看到3510~3514H单元中的数依次为3030303132。实验流程图如下:SI-目标+1SI-1DX-0AX-二进制数存入SISI-1从原单元中取数余下高位化为ASCII码余数化为ASCII码除10AX-商DX-余数存入SI商=0SI=目标首址?结束NYYN代码和运行结果:STACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKORG2000HSTART:MOVSI,3500HMOVBX,0MOVDI,3515HMOVAL,[SI]MOVAH,[SI+1]MOVDX,0MOVBX,0AHPRO1:DECDIDIVBXADDDL,30HMOV[DI],DLMOVDX,0CMPAX,0JNEPRO1PRO2:CMPDI,3510HJEEXITDECDIMOVDL,30HMOV[DI],DLJMPPRO2EXIT:MOVAX,4C00HINT21HCODEENDSENDSTART我们如果输入0C00,在3510处开始看到:3030303132我们如果输入1012,在3510处开始看到:3034363234实验结论:程序执行结果和理论值相符4.十六进制数转换为ASCII码设经过CPU处理后的十六进制存放在起始地址为3500H的内存中,把它们转换成ASCII码之后,再分别存入起始地址为3510的内存单元中。参考流程图如图2-5所示。实验步骤(1)输入程序并检查无误。(2)在3500~3501H单元中存入四位16进制数203B,即:e3500,并输入3B,20。(3)G=2000,运行程序(4)D350A,显示结果为:0000:350A42333032`输入数与结果ASCII码对应顺序相反实验流程图如下:AX-DX取低四位CX-代码长度DI-起始地址DX-16进制数转换为ASCII码存结果修改地址指针是A–PH,再加7HDX内容右移四次0–9CX-1=0结束YNNY实验代码和结果:DATASSEGMENTCOUNTEQU4ORG3500HHEXDW203BHORG3510HRESDB4DUP(?)DATASENDSSTACKSSEGMENTDW50DUP(?)TOPLABELWORDSTACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVDX,HEX//将待转换的16进制数放在DX寄存器中MOVSI,OFFSETRES//目标地址放在SI寄存器中MOVCX,COUNTTRAN:MOVAX,DX//将16进制数装载到AX寄存器中ANDAX,000FH//取出低四位CMPAL,9//与9作比较JAVOCABCMPAL,0//与0作比较JBVOCABMOVBL,30H//若为0到9的数字ADDBL,ALJMPNEXTVOCAB:MOVBL,41H//若为字母,则进行以下处理SUBAL,0AHADDBL,ALNEXT:MOV[SI],BL//将转换后的值存入目标地址中INCSIMOVBL,4//将16进制数右移4位XCHGBL,CLSHRDX,CLXCHGBL,CLLOOPTRANMOVAH,4CHINT21HCODESENDSENDSTART存储单元初始值为3B20,程序运行后结果为:如果将存储单元的初始值修改为5F34,则程序运行结果如下:AX-DX取低四位CX-代码长度DI-起始地址DX-16进制数转换为ASCII码存结果修改地址指针是A–PH,再加7HDX内容右移四次0–9CX-1=0结束YNNY5题实验流程图5.BCD码转换为二进制码设四个二位十进制的BCD码存放在起始地址为3500H的单元中,转换出的二进制数码存入起始为3510的内存单元中,程序流程图如图2-6。实验步骤:(1)输入程序并检查无误(2)在3500~3501H单元中存入四个十进制数(12,34,56,78)的BCD码,即e3500,输入01.02.03.04.05.06.07.08。(3)G=2000,运行程序(4)D3510,显示结果为35100C00220038004E00实验代码和结果:DATASEGMENTORG3500HBUFDB100dup(0);DATAENDSSTACKSEGMENTPARASTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVCX,4LEADI,BUFLEASI,BUF+10H;存转化后的数MOVBL,10LCW:MOVAL,[DI]MULBLINCDIMOVAH,00HADDAL,[DI]MOV[SI],ALINCSIINCSI;INCDILOOPLCWEXIT:MOVAX,4C00HINT21HCODEENDSENDSTART如果我们输入的数据为01,02,03,04,05,06,07,08图6-1如果我们输入的数据为09,08,07,06,05,04,03,02四.实验感悟:学习汇编语言打破了我传统的思维模式,这门语言已不再是以前学C语言和C++语言时那种模式,虽然用汇编语言编写的程序运行速度快,实时性好,占用内存空间小,能最大限度发挥硬件的作用,但汇编语言编写的程序效率低,程序设计的技巧性强,因此他要求编写人员既要熟悉计算机的硬件结构,又要熟悉计算机的指令系统,才有可能编写出高质量的汇编语言程序。汇编语言学习起来虽然不容易,但是我愿意去探索其中的奥妙,今后汇编语言将成为我打开计算机和互联网的IT世界的敲门砖,我还需要多多努力。