微机试验报告_第1页
微机试验报告_第2页
微机试验报告_第3页
微机试验报告_第4页
微机试验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机实验报告实验名称KeilC的使用与汇编语言上机操作 指导教师小英专业班级 中法1201肖洋学号 U201214343联系一、任务要求1. 掌握KeilC环境的使用1 )字节拆分、合并:调试e421.asm程序, 观察相关寄存器和单元的容。2 )数据块填充:调试 fill.asm程序,观察相关寄存器和单元的容。2. 编写两个十六位数的加法程序。有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于 R3(高八位)和 R4 (低八位),进位位存于R2。二、设计思路1. 字节拆分、合并程序:利用汇编语言中的 XCHD和SWAP两个语句来实现将八位二进制数拆

2、分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD码与30H相或(加上30H )得到ASCII码。 将两个ASCII码和0FH相与(高四位清零)得到 BCD码,利 用SWAP语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。2. 数据块填充程序: 将R0用作计数器,DPTR用作片外数据指针, A作为原始数据来源,依顺序在片外的存储单元容填充数据。 利用循环语句来减少程序长度,并控制填充单元个数为片外100H个。(通过R0的进位控制)3.两个十六位数加法程序:把第一个十六位无符号数的地八位和高八位分别存于20H和21H中,把第二个十六位无 符号数的地八位和高八位分别存于30

3、H 和 31H中,对20H和30H中的两个低八位进行ADD加法操作,结果存于R4中;然后对21H和31H中的两个高八位进行 ADDC带进位的加法操作,结果存于R3中.然后将累加器A清零,并和#00H进行ADDC带进位的加法操作,结果产生进位数并存于R2中,程序结束。三、资源分配1. 字节拆分、合并程序:片30H单位存放原BCD码,31H和32H存放拆分后的两个 ASCII码,33H存放合并后的BCD 码。2. 数据块填充程序:R0作为计数器,DPTR作为数据指针,片外 RAM空间从7000H开始填充。3. 两个十六位数加法程序:20H,21H:第一个数的低八位和高八位30H,31H :第二个数

4、的低八位和高八位R4 :加法结果的低八位R3 :加法结果的高八位 R2 :加法结果的进位四、流程图1.字节拆分、合并程序2.数据块填充程序3.两个十六进制数相加程序土 二二二兰=壬五、源代码 (含文件头说明、语句行注释)1字节拆分、合并程序File n ame: e421.asmDescription: 1 字节BCD码转换为2字节ASCII2字节ASCII码转化为1字节BCD码Source used: 30H: BCD data31H, 32H31H, 32H -33H:ASCII dataORG 0000HLJMP MAINORG 0100HMAIN:MOV SP, #40H;赋堆栈指针M

5、OV 30H, #49HMOV RO, #32H;30H;R0单元赋值 指针赋值MOV RO, #0;32H单元清零MOV A, 30HXCHD A, R0;拆分字节ORL 32H, #30H;转换为ASCIISWAP AORL A, #30H;转换为ASCIIMOV 31H, A;结果存于31H单兀MOV A, 31H;从31H单元取值ANL A, #0FH;转换为BCDSWAP AMOV 33H, A;结果存于33H单兀MOV A, 32H;从32H单元取值ANL A, #0FH;转换为BCDORL 33H, A;合并字节HERE:SJMP HERE;踏步END2.数据块填充程序:将片外R

6、AM 7000H-70FFH单元按一定规律填充File n ame: fill.asmSource used:R0:计数器DPTR:片外数据指针ORGORG 0000HLJMP MAIN0100HMAIN:MOV 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 HERE;原地踏步END3. 两个十六位数加

7、法程序:File n ame: add.asmDescripti on:Source used:ORG OOOOHLJMP MAINORG 0100HMAIN: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,AHERE:SJMP HERE进位清零 赋值;置数据指针;取第一个数低位;两位数低位相加;存“和

8、”低位处理地位相加进位;修改指针;取第一个数高位;两数高位相加;存“和”高位;处理高位相加进位;最终进位存于R2;原地踏步END六、程序测试方法与结果1字节拆分、合并程序:测试方法:单步调试观察寄存器变量和片RAM的存储空间。结果如图:Ad如m |d:30I-P:2:2D:0xQ:0D;0x?8;aD:0x?0:OD:OxAE;SD:0x匚G:QDlQxDB:S彳9 时 39 49 OQ QO OQ QO QO 3Q 00 OO Q3 DO OQ 00 OO OJ g 00 00 OO g 00 GQ QO QQ OQ QO QO OO QG OQ 03 GO OQ QO O口 Q3 GO Q

9、O O口 CO 00 00 00 QO 00 00 00 00 OO DO 00 OO 03 CO 00 00 OO 03 00 00 QO OQ OJ 00 00 00 00 OO 00 00 00 00 IF TQ 00 OQ 2 00 00 00 00 2 00 00 Q0 00 CO GO FF 00 00 OO 00 00 CO 00 QO 00 00 OQ 02 02 ET FF FF 07 00 DO 00 OO QJ 00 QQ QQ OQ 00 QQ QQ 00 (J0 FF g GO 卓0 Q0 QQ 00 00 BO QJ OQ QQ FS OO Q0 00 00 00

10、00 FF FF 00 00 00 OO DO 00 OQ 03 CO 00 00 OO 03 00 OQ 00 OO OJ 00 00 专Q 00 QO 00 00 00 OG 09 DO 00 OQ 01 CO O0 00 OO 2 00 00 00 OO OJ OQr适 SLEUdc | 黑 Lmls | 潯皿tthl bZ Memory 1 .gS/m colsI 3.1K/S l 1JK崔 电IJ口皿0x30OkJODh/iOITI”$ r- 一DxjykIOOk40OkIODx50(JOC: 3z0122390. 30CO1273rl!t性能分析:该程序能很方便地实现将一个BCD码

11、拆分为两个 ASCII码以及将两个 ASCII码合并成一个BCD码的功能。2.数据块填充程序:测试方法:利用程序的运行和停止控制来观察最终的寄存器变量和片RAM的存储空间。结果如图:DO;迂贈訐计致器Lui 3756140战护SPtOiEfilbifClx卜器匚LA AE4CLRAK2V f 50EMOVMOVDPTR,SDTQQg!H|crzPFTaf #Di(TgaQrrxx:i.700D ocrQCCTq LrUUDT7J3B:wgpgQQQDZ:D2LD:;716:oosnCD10DDCDQ03DDa00jc00a0oa0iQQQ0Qaaa00Q0QDQ00OrQJ0Jga5rQQQ凶

12、 oa0I3323an0:.屯0空03CC00ft60d右a00000000饷010090000009aQ9000M01QgDgggipQg即uqQp0gQd01CD:!&D:ra二ir333c-旳Q0 o330 oo -D*Q9 _a0 o fl0 o-D0Q0c-&aLl*0Q0QQ003Q0寸Q0QQ&:0(10DClD02a00d0D000-0D0Ga0QaD00n rm; nn-arL I I Z + nr*Id sr+i0co0甘OD0ooQ00QDQC-0ZDQ00E0dQDD33doodQD4a00a口QG&g0QaQDQ0a:DaDDD-cC-DCl0i0C0C000900a

13、匚Dg0D0000Q0Q000QaD0D0号弓Q寸rQ35Qg:DClDbDc3:u3I3D230CD0000心30Of00店600oD0000oCcDc0aQ0a0D(5IQqQ00gQggDnD3DD0zc33:!:3o- 0o n口S?IggI?Mg呂OOCb OC*ClotrBSS88IU9-LWU*匸 HBrpTxa-cl7“x WE MW 言 Gr-igw-LI二 K MOL0CPE0 一X -i840-K -葺Q Eg芒“ Xin 51tjgwrlK.i_+w 一_X诃一iKmH dKTS rnI4nr?-!冠 * S3ms 03MBL-D 1MI1xdsH!吕V出傅須P-“ 医

14、电观拆 ri=*u T;Li abJT、i-iirrl 艮iiiIat9Io D严 rn id8? u*.1 2;nia -4iriiCMrl2 r C;-LH一3-h_&JR n?LpUa.- nmll-nH瞿all- _.- K-n50It*oqlu*q- iAimu 即 HFlPIlpla多嶼 cc LTcc cc cc -cc cc cc3匚1 Msin c*i m q mto QqHz申LO L OJ iOSm UMO Cgo cnv H 3 g9 0fC o crHCM卯切l 8 mQQ Dua o 匸L口 CMm O r- kl旳U常咸o亡c1z mL/l A S 6A U田bn

15、 o亡nCO tM M? Q$ mCM 6 O 匸HCM M1W W Ag ug g 口右fjdi ar- M m uoh磴R-l cn O 亡H理*LD w CO 601 u也g o匸F=lW |Xl2 口 M hiCM GO p O Q- CM COLJ) co 01皿U田业口匸oui U cm r=CM 0EmO CHm旳5 9 CO 6卫DSOUJ9 Q呼M列6O卜W tn o coz tnLO 98 6旳1O Eu o cULD um 起 Li tngQ T* O COCM乃b 9 曲EY o口 J O冲O o* m cm cnm 6 c lS 3 6asn m o c 口血i o匸

16、oe M日 叶9A F也n 0 oOi m A 63 uQ Em O CaE 6O 卜 fd SU CDT O tom eU1 W L Ch0 oG tn O C吃Ll 03皿3 口 5oq nen o o ccE CHF S L 63 ua s c s s Mm s Un的fnvm bmmm:Lrd:sooxoworooxo4UOLOQ苕-morooxo诂 WOQXa SOOOKO MLOLOO苕 uoooxo EOLOO 苕 NOSOOMO rTCLOO苕sc0 Lo To s Ho OQ “GOQEOOKOwaulx1?性能分析:从寄存器变量DPTR最后的取值(7100H)来看,该程序能

17、实现片外RAM从7000H到70FFH的数据填充。程序中利用R0从00H到FFH的计数中产生的进位很巧妙地控制了循环的次数。3. 两个十六进制数相加测试方法:手动输入两个加数,运行程序,观察结果是否正确。 在调试过程中,跟踪A, R2,R3, R4的值,看是否与预期相同。结果如图:仙QdOQQGciDHDmri|lrIL $st-Lleislieo DoomniCl-R ACLfiAMX2牡浬哥豎梧玄进伫hSX tOKOOME河;展缘遗准存于MHOV5JMP 2LRZ;原地S3 步HOF工KUVR?fAat ffiiy;CLPcJco畑MC*riLH,灼昶MCVnlh42Dfl:豈歡擂指卄a?

18、IOftl f t D 卜OEWGVA.;敢菁一豹三尸Tir-H 0F 9giM. u AZ二4财=2:酥S!Qx55:5:13 。口:D ZQ口叮03a ocaz Da?OD a:Mcd 口G an30 OS50亂a-d asDCDCDD Ou M DCD一吧53DD 0Q盹00DOQU a: DO 汕as加asca 恥jfd sd aaasoDOSaoas0*5DCQO QDC:-加2D00粧0:DC:DDO000:DFf:nD: taSA: JL :aoOO3FTOG00ao闆CD胆so01D2FFFFFTQF加oa0000肚an00ODsoFFDdC&4 Cl00009GViOkBFi

19、 Fi00000QC-0FPFF肿0Q的00如00M0Q40co0000阳wQQ000010000CQQ如oo00抑w0Q010(聊00000000do5; JKF1;4?F?(ID即;DQ0DODQ00g0300310QAL9Qoa皿gowQDQm沖QQDQODOQDCg?M仞3005DQQQQDDO211DDitaxass3?QO:o凹DOSC0&第07Q=-Q-Q:DBQQQDOPGQ3QQ07wK::QQDO企gDQPOQ =QCg?QQ3D03?Q00go慎如-MlzfliSE:CeOCDfidDO66dsDCdo0&006daDCOt)03E0adSbDd曲dz00caODbbSd

20、M0&daDOOOld&帕:/D0DO00如DC佃M曲D0O0DO前帕000&DO防00O0加00000*000鶴如DOod0000Oo00oa泊:.别比即於LekxK1 目間阿口叩i |左1%甲耳0 结果:输入两个十六进制数为1911H和0990H,得出合数为22A1H,进位为0,各项指标均与预期相同,程序正确。七、思考题1. 怎样查看工作寄存器、SFR片RAM片外RAM及程序代码空间容?Disassembly窗口有何作用?(1) 选择Debug下的Start/Stop Debug Session,在界面的左侧会出先程序代码的空间地址容(2) Disassembly 窗口可以显示编译之后的汇

21、编代码2. 字节拆分、合并还有哪些方法,举一例说明(1)字节拆分可以利用与运算ANL,例如将30H单元中的数据从中间拆分,低字节存于31H,高字节存于32H:MOV A, 30HANL A, #0FHMOV 31H, AMOV A, 30HANL A, #F0HMOV 32H,A(2)合并字节可以利用或运算ORL例如将31H单元中的数据和32H单元中的数据合并,结果存放于30H中:MOV A,31HSWAP AORL A,32HMOV 30H,A3.若按递减1规律填充数据块,应如何修改程序?修改后程序如下ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP,#40HFILL:CLR A;AMOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论