微机实验报告

上传人:友**** 文档编号:136948206 上传时间:2022-08-17 格式:DOCX 页数:17 大小:219.86KB
返回 下载 相关 举报
微机实验报告_第1页
第1页 / 共17页
微机实验报告_第2页
第2页 / 共17页
微机实验报告_第3页
第3页 / 共17页
点击查看更多>>
资源描述
微机实验报告实验名称KeilC的使用与汇编语言上机操作 指导教师刘小英专业班级中法1201姓名肖洋学号U3联系电话一、任务要求1?掌握KeilC环境的使用1) 字节拆分、合并:调试程序,观察相关寄存器和单元的内容。2)数据块填充:调试程序,观察相关寄存器和单元的内容。2. 编写两个十六位数的加法程序。有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于 R3 (高八位)和 R4 (低八位),进位位存于 R2。二、设计思路1?字节拆分、合并程序:利用汇编语言中的 XCHD和SWAP两个语句来实现将八位二进制数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD码与30H相或(加上30H )得到 ASCII码。 将两个 ASCII码和0FH相与(高四位清零)得到BCD码,禾U用SWAP语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。2?数据块填充程序:将R0用作计数器,DPTR用作片外数据指针,A作为原始数据来源,依顺序在片外的存储单元内容填充数据。利用循环语句来减少程序长度,并控制填充单元个数为片外100H个。(通过R0的进位控制)3?两个十六位数加法程序:把第一个十六位无符号数的地八位和高八位分别存于20H和R2中,程序结束。21H中,把第二个十六位无 符号数的地八位和高八位分别存于 30H和31H中,对20H和30H中的两 个低八位进行 ADD加法操作, 结果存于 R4中;然后对21H和31H中 的两个高八位进行 ADDC带 进位的加法操作, 结果存于R3中然后将累加器A清零,并和#00H进行ADDC带进位的加法操作, 结果产生进位数并存于、资源分配1.字节拆分、合并程序:片内30H单位存放原 BCD码,31H和32H存放拆分后的两个 ASCII码,33H存放合并 后的BCD 码。2.数据块填充程序:R0作为计数器,DPTR作为数据指针,片外 RAM空间从7000H开始填充。3. 两个十六位数加法程序:20H,21H:第一个数的低八位和高八位的低八位R3 :加法结果的高八位四、流程图1?字节拆分、合并程序3.两个十六进制数相加程序30H,31H :第二个数的低八位和高八位R4 :加法结果R2:加法结果的进位2?数据块填充程序分別幔拱为舟=壬五、源代码(含文件头说明、语句行注释)1?字节拆分、合并程序File n ame:Descripti on:1字节BCD码转换为2字节ASCII2字节ASCII码转化为1字节BCD码Source used:30H: BCD data31H, 32H : ASCII data31H, 32H -33HORG 0000HLJMP MAINORG 0100HMAIN:MOV SP #40H;赋堆栈指针MOV 30H, #49H;30H 单元赋值HERE:2?数据块填充程序:File n ame:Source used:MOVR0, #0;32H单元清零MOVA, 30HXCHDA, R0;拆分字节ORL32H,#30H;转换为ASCIISWAAPORLA,#30H;转换为ASCIIMOV31H, A;结果存于31H单兀MOVA, 31H;从31H单元取值ANLA, #0FH;转换为BCDSWAAPMOV33H, A;结果存于33H单兀MOVA, 32H;从32H单元取值ANLA, #0FH;转换为BCDORL33H, A;合并字节SJMPHERE;踏步END将片外RAM 7000H-70FFH 单元按一定规律填充RO:计数器DPTR:片外数据指针MAIN:ORG 0000HLJMP MAINORG0100HMOV SP#40HFILL:CLR A;A寄存器清零MOV R0, #00H;设循环计数器MOV DPTR, #7000H;设数据指针FILL1:MOVX DPTR, A;传送到片外RAMINC A;A内容加1INC DPTR;修改数据指针INC R0;修改循环计数器CJNE R0, #00H, FILL1;判断是否结束HERE:SJMP HEREEND;原地踏步3?两个十六位数加法程序File n ame:Descripti on:Source used:ORG 0000HLJMP MAINORG 0100HMAIN:HERE:CLR CMOV 20H,#11HMOV 21H,#19HMOV 30H,#90HMOV 31H,#09HMOV R0,#20HMOV R1,#30HMOV A,R0ADD A,R1MOV R4,AADDC A, #00HINC ROINC R1MOV A,R0ADDC A,R1MOV R3,ACLR AADDC A,#00HMOV R2,ASJMP HEREEND;进位清零;赋值;置数据指针;取第一个数低位;两位数低位相加;存“和”低位;处理地位相加进位;修改指针;取第一个数高位;两数高位相加;存“和”高位;处理高位相加进位;最终进位存于R2;原地踏步六、程序测试方法与结果1?字节拆分、合并程序:测试方法:单步调试观察寄存器变量和片内RAM的存储空间。结果如图0:0x30493-i3949:j000000oo:j 00oo-03D:0x4B :BOO 000i- QOOQ 0 30 0oa-iD: Ox?Q 0000000QOg00002QO 0 00CQccD;0x?8 ; a000000QO0000002FFQQ 00GO2D:0x?0:0FF0000oo00000000QO00 00OO02D:QxAB ;B00 000QO.1!000003FF 0 co4.0OOD : Ox 匚 DiQxDB b00QO00的0000FFDOFFOQ0000000022oo09 0 00 0QOCQ00cc01|D:30H说 3 Stack Locals亟也订里 Mtmtjry 丄oo 000OO匚V00:00oo00 0 30 oa03dDDO 0oa03OQoo3000OQ2oo0000OQcoOQooDO00GO2OQDO00 003CO02FFFFFF07000000OOQJOQOOso00SOOQ 0F8DO0300oo 000GO2oo0000OQOJ00co 0QOOOtn000000OO09OQ,4 3.1K/5 i 1.碎 0口皿0x30OKJODH/IODxjyCKIOOK40OKIODx50(JOC: 3z012239 r0卸30CO1273性能分析:该程序能很方便地实现将一个 并成一个BCD码的功能。BCD码拆分为两个 ASCI I码以及将两个 ASCII码合2?数据块填充程序:测试方法:利用程序的运行和停止控制来观察最终的寄存器变量和片内RAM的存储空间结果如图:卅rart-2r-3-1 w- Ta TB 气魚巧帀T - - J TB -T -u- c=0x00307S&J40M07自PtO翼甘久P r3: FIIX?CLft A2奇亨君PECKDOOS匡专匚LEIA4:K3V g_t AOOMOVDiTR, ITCHOOH oaxgag sn iAGDqDFTa p # DifTgaf! fILLI?MCTA SIHPTRR A:传它览冲乳时冷: ?:皿,帖5aCVSAEPT!l rk1IKC h以内舂zraiMr- rA An*r)?TUT*UFC VKtllMil耐圍 fiflzmAecpawAxTMDE UDnCCTqC xCUtn MAIN ;HOTCEA 廉叫f OOMllLL:DPTB* #7(Wp!?;A曲三詁已斗:说而下汁扭益:寸黏书指孑书(6 FZ LLL iDTTOA:桂送到&卜07Acmi-序改叙珂甫 FTtn.*壬寸PtHZ :二-松生LJSa&stDCT&OO : KlgCTW 工4韓ZiDxDZTDZCz和口叶 o cm口斗E :Qwg?71ASE:DxD271?AsI _aa| n mrAxn-BAnuA I =C*Dcog00QDCODOoa00oa0 0 soTOcoJ8 38 asOSsava6885:8aotooxo : xLg9 s9 g& 9? sZgT s0 sA Y(TV 3V SVw6V8V V9V9Y&v-P V Q/TV:VOLOOXO : Xov2636as26566668696 96 B662616 06 J833as38S8V8:Y80 OOXO :5888S93S8788ZST3IL 3L dLGLPL 6L QLLL9LS: OLOOXO XZLTLor.a?39Q90989V989 L9 99S9t9 9 29 T909as3Sas S:OS& OOxosXasVS68;Z.S9999&GSrs os jb3Qb” S& Y&6fr8&lb9&:SfrO OOXO X弭?&ZBT72JC3 as?Y 6 8 S9G & C 乙T?01Z33:3ZO OOXO :az 3 82vr6332LZ92S3S3 ZZ T2orJTit ar oxQ:VT6T8TLT:z-TO OOXO X2T-ST-frTer.2TOT-ao30 SO YCGOSOLO 90 SO&0CO30TO002000 乙 0oxo : xHOOOZXS?JPFY0000000000oo0000000000oo00oo000000oo00oooo0000 00000000000000oo0000 00 0000oooo:00occc0000oo00cocooc00oo00cocoococ00coooooococ oc0000occc0000oo00co co ococoooo5:乙 0C9X0000000000oo0000000000oo00oo000000oo00oooo0000 oc000000000000oo0000 00 0000oooo:00cccc0000oocoCDcoocDOooCDCDcoococ00cocococcoc oc0000occc00DOoo00CD co ococooco?oactoc?3 x0000000000oo0000000000oo0000000000oo00oo00OGoc 00000000000000000000 00 00 00oooo:06CL6?Xj : x0000000000oo0000co00oooo0000oo00000000oooo0000 oc000000000000000000co 0000oooo:89CtOC? 0 :00oc000000oo00coco00oooo00coco00oc00cooo00oc00 0?000000oc00000000co co 0000ooootACC OCXO :000000szItXI0乙JI3Tai XgjYX61sxtx9T5T?ITXox iC30ao OGO6090to9090 ?05xooofXiomAQT | f?ouiANETlI.OOWAQT| IUJW.VA| WO1 ( a|rCAA| PWWAO)Ay (bay 2uraPiiH axes TTII3 H00 OH 8NTDg oca eu Decv v aua? HOOCAt XAD MAOH31ICD?O胡 1 It9ZX010CD 0g?讥OKIioa ?、?9WOSO*9*OJXOSCificsjoeZIOOXO :2gmgi可知冷那呈:aav:6OlOOOdxrsuoeoxooxoioij3NTO6J009Saooo? o:c0m ;匚(Z?H60#*HT? AOKo*o RW co? o de q co? o00*00(FOcomoomOFG心ca n*g性能分析:从寄存器变量DPTR最后的取值(7100H)来看,该程序能实现片外 RAM从7000H到70FFH的数据填充。程序中利用 R0从00H到FFH的计数 中产生的进位很巧妙地控制了循环的次数。3?两个十六进制数相加测试方法:手动输入两个加数,运行程序,观察结果是否正确。在调试过程中,跟踪 A, R2,R3, R4的值,看是否与预期相同。结果如图:ft11n JC_-n aclra缶弼們;史理W 二临工注亡 DC再 tO? ?O19;;金君说鱼奁于航1 Hu厂rE0A2L;3k: XE-丄20 :KLJE ; S 护注1 : ?1F!OIKsDxaonFFHW竺I豊施MOVR2,A:原西越步TB5nOh DOFFMOViplrCLnn o:atCLP C:进戈浦孝 il$C-st-Lleislieo Doomni03 :MW丿、严Orin0*HCV池熬工irv叭畀DR虧疑指甘07QBMCV A,;祗鳥一亍裁 FLMQCkDDmr-arnT 才nrCkDT 仙尼|三咖cwt结果:输入两个十六进制数为1911H和0990H,得出合数为22A1H,进位为0,各项指标均与预期相同,程序正确。七、思考题1.容 Disassembly 窗口有何作用怎样查看工作寄存器、SFR片内RAM、片外RAM及程序代码空间内(1) 选择Debug下的Start/Stop Debug Session,在界面的左侧会出先程序代码的空间地址内容(2) Disassembly窗口可以显示编译之后的汇编代码 2.字节拆分、合并还有哪些方法,举一例说明31H,字节拆分可以利用与运算ANL,例如将30H单元中的数据从中间拆分,低字节存于高字节存于32H:MOV A, 30HANL A, #0FHMOV31H, AMOVA, 30HANL A, #F0HMOV 32H,A合并字节可以利用或运算ORL,例如将31H单元中的数据和32H单元中的数据合并,结果存放于30H中:MOV A,31HSWAP AORL A,32HMOV 30H,A3.若按递减1规律填充数据块,应如何修改程序修改后程序如下ORG 0000H LJMP MAINORG0100HMOV SP,#40HMAIN:FILL:CLR A;A寄存器清零MOV R0, #FFH;设循环计数器MOV DPTR, #70FFH;设数据指针FILL1:MOVX DPTR, A;传送到片外RAMDEC A;A内容减1DEC DPTR;修改数据指针DEC R0;修改循环计数器CJNE R0, #FFH, FILL1;判断是否结束HERE:SJMP HERE;原地踏步END4.若从7020H单元开始,连续填充10个字节,应该如何修改程序ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP, #40HFILL:CLR A;A寄存器清零MOV R0, #00H;设循环计数器MOV DPTR, #7020H;设数据指针FILL1:MOVX DPTR, A;传送到片外RAMINC A;A内容加1INC DPTR;修改数据指针INC R0;修改循环计数器CJNE RO, #1OH, FILL1;判断是否结HERE:SJMP HERE束END;5.若完成双字节BCD码加法,应如何修改程序ORG 0000HLJMP MAINORG 0100HMAIN:MOV SR #40HMOV 20H, #0ABHMOV 21H, #99HMOV 30H, #0CDHMOV 31H, #0EFHMOV A, 20HADD A, 30HDA AMOV R4, AMOV A, 21HADDC A, 31HDA AMOV R3, ACLR AADDC A, #00HDA AMOV R2, ASJMP $END本人承诺:本报告内容真实,无伪造数据,无抄袭他人成果。本人完全了解学校 相关规定,如若违反,愿意承担其后果。_年_月_日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!