当前位置:文档之家› 微机实验报告一

微机实验报告一

实验名称Keil的使用与汇编语言上机操作成绩______________ 一、任务要求1•掌握Keil环境的使用1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。

2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。

2.编写多个十六位数的加法程序有4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。

要求:和存于R3 (高八位)和R2 (低八位),进位位存于R4。

二、设计思路实验一已给出程序代码,不需要设计,下面阐明实验二,编写多个十六位数的加法程序的设计思路。

十六位数相加,先是低八位相加,低八位相加不用考虑进位,所以,此时用ADD指令,但因为在每次循环时都有CLR C操作,所以也可以用ADDC指令。

而且题目中要求将和的低八位存于R2,所以将每次低八位相加的和存于R2,然后从R2中取值求和。

低八位相加后高八位相加,因为必须处理低位相加的进位问题,所以必须用ADDC 指令。

而且因为要求高位和存于R3,所以将每次计算的和存于R3,每次从R3中取数跟新的高八位相加另外考虑到高位进位的问题,所以必须安排一个地址单元或者寄存器存放最高位正是因为每次循环中,进位都会被处理,所以每次循环开始要CLR C。

三、资源分配4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。

和存于R3 (高八位)和R2 (低八位),进位位存于R4。

R0和R1作为数据指针,存放低八位和高八位的地址。

循环次数存于R5。

四、流程图Cyj ■ ■*YESR4—A 进位存于KH五、源代码(含文件头说明、语句行注四个十六位数的加法程序File n ame: 3.asmDescriptio n: 四个十六位数的加法程序Date: 2016/09/23 Desig ned by: 陈钰軌元初始賦值RO —20H指針賦初值NOR2*-(20H)(2111) R4—QOH 寄存器赋值R2,R3,R4,R5 寄存器20H-27HORG 0000HLJMP MAINORG 0100H MAIN: MOV R0,#20HMOV R1,#21HMOV R2,20HMOV R3,21HMOV R4,#00HMOV R5,#03H LOOP: CLR CMOV A,R2INC ROINC R0ADD A,@R0MOV R2,AMOV A,R3 ;设数据指针;R2 —(20H),R3 —Source used: R0,R1数据指针;进位清零;A —R2;R0—R0+1+1 , R0指向下一个低八位;A—A+(R0),低八位相加;R2—A,低八位的和存于R2;A —R3(21H);最高位进位清零;设置循环次数INC R1INC R1 ;R1 — R1+1+1 , R1指向下一个高八位ADDC A,@R1 ;A — A+(R1)+C ,高八位加进位的和 MOV R3,A;R3—A ,高八位的和存于 R3CLR A ;A 寄存器清零ADDC A,R4 ;A —A+R4+C ,计算进位 MOV R4,A;R4—A ,进位信息存入 R4DJNZ R5,L00P ;判断R5是否等于零判断循环是否结束六、程序测试方法与结果字节拆分、合并程序:(存于30H 的数被拆分,分别转为ASCII 码存于31H 和32H , 最后再合并存于33H )Address: d:3QhD :0x30:0 :的 3弓D :0x32:2 :39D:0x34:4 : 00 00数据块填充程序(将片外RAM 7000H-70FFH 单元按一定规律填充)HERE: SJMP HERE ENDAddress: |x:7{XH3hX 0x007000 00 01 02 03 04 05 06 07 OS 09 OA OB oc OD OE X 02£Q0700F OF 10 11 12 1314 IS ie 1719 19 1A IB 1CID X OX0O7QLE IE IF 20 21 2223 2^ 25 26 27 25 29 2A 23 2C X 0X00702D 2D 2E 2F 30 31 32 33 3^ 35 3石 37 38 39 3A 33 X 0X00703C3C 3D 3E 3F 40 41 42 43 44 45 46 47 43 49 4A X4B 4C 4D4F SO 51 52S3 545S S6 57 se S9 X 0x00705Zi 5A 53 5C 5D 5E 5F €0 61 62 €3 6^ 65 66 67 石三 X 0x007069 69GA €B 6C 6D 6E 6F P 71 72 73 7勺 75 76 77 X 0X00707B 7a79 7A 73 7C 7D 7E 7F SO SI S2 S3 84 85 S6 X 0x007087 8? n u Q w89 SA EB ec 三二 3E SF 9 0 91 92 93 94 三三 X 0x00^7096 日石 97 3S 99 9A 9B 9C 9D 9E 9F AO Al A2 A3 A4 X 0X0070AS A5 A.7 AS A9 AA A3 AC AD AE AF BO Bl B2 B3 X 0X0070B4B4 B5 B6 B7BSB9BA33 BCBDBE BF CO d C2 X Q K 007QC3C3匚弓 C5C6C7G3 C9 GA CB CC CD CE CF DO D 二 X 0X0070D2 D2 D3 D4 D5 D6 b DS D9 DA DB DC DD DE DF EO X OX0O7OE1 El E2 E3 E4 E5 E6 E7 E3 E9 EA E3 EC ED EE EF X 0x0070F0 F0 Fl F2 F3 F4 F5 F6 F7 EB F9 FAFBFCFDFE X0X0070FF FF00 00 DODO 00 00 00000000 00 00 003 3四个十六位数的加法程序输入的数:Memory 1 D : 0x20;0; CC DD D;0x22:2: EE FF D:0x24:4: FE EE D ;0x26;6; 33 11结果:r4 0x02思考题SFR 片内RAM 、片外RAM 及程序代码空间内容 ? Disassembly窗口有何作用?1)观察工作寄存器,SFR 点击 View Registers Window ,弹开 Registers "窗口。

在此窗口查看。

2) 观察10端口,Timer ,中断控制寄存器:点击菜单 Peripherals ,弹出外设选项1 .怎样查看工作寄存器 Address:栏,选择对应外设,弹出相应外设控制寄存器窗口,即可观察。

3) 观察片内RAM,代码区和片外数据区:点击菜单View 选择Windows ,在Address栏中键入存储空间类型和地址,可以观察到相应内容。

Disassembly窗口显示代码及其相应的机器码,也展示了代码的PC地址。

2. 字节拆分、合并还有哪些方法,举一例说明。

举例:ORG 0100HEND3. 若按递减1规律填充数据块,应如何修改程序?MemoryMAIN: MOV SP #40HMOV 30H, #49HMOV A, 30HANL A,#0FHORL 32H, #30HMOV A,30HANL A,#0F0HSWAP AORL A, #30HMOV 31H, A HERE: SJMP HERE ;赋堆栈指针;30H单元赋值;拆分出低四位转换为ASCII;拆分出高四位;转换为ASCII;结果存于31H单元踏步将INC A ”改为DEC A 改后运行结果如下4. 若从7010H 单元开始,连续填充20个字节,应该如何修改程序?ORG 0000H LJMP MAINORG 0100HMAIN: MOV SP,#40HFILL:CLR A;A 寄存器清零MOVRO, #20 ;设循环计数器MOVDPTR, #7010H;设数据指针 FILL1:MOVX @DPTR, A ;传送到片外RAMDEC A;A 内容加1INC DPTR;修改数据指针DJNZR0, FILL1;判断是否结束X X X X X X X X X X X X X X X 0x007000 0x007012 0x307024 0x307036 0x007049 0X007Q5A OXO07O6C 0X00707E 0x007090 0x3070A2 0x307034 0.XQ070C6 0x0070D9 0X0070EA 0X0070FC00 FF FT FD FC ra FA F9 FS F7 F6 F5 E4 F3 F2 Fl F0 EF EE ED EC EB EA E9 E3 E7 E6 E5 E4 E3 E2 El EQ DF DE DD DC DB DA D9 DB D7 DE D5 DE D3 D2 DI DO CF CE CD CC CB CA 匚9 C8 C7 匚百 CS C 哎 C3 匚2 Cl CO BF BE BD EC BE BA 39 BS B7 BE B5 B4 B3 B2 Bl BO AF AE AD AC AB AA A9 A8 A7 A6 AS A4 A3 A2 Al AO 9F &E 9D 9C 9B 5A 99 9B 97 9£ 95 94 93 92 91 90 SF 8E SD GC QB SA SG 88 37 86 S5 Q4 33 S2 fil BO 7F 7E 7D 7C 7B 7A 79 7S 77 76 75 74 73 72 71 70 6F 6E 6D 6C 6B 6A €9 63 67 66 65 6-1 63 €2 61 60 5F 5E 5D 5匸 SB 5A 59 56 57 56 55 5弓 53 52 51 50 4F 4E 弓D 4C 4B 4A 弓今 43 47 4S 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 38 37 36 35 34 33 32 31 30 2F 2E 2D 2C 2B 2A 宜9 2fi 27 2€ 25 24 23 22 21 20 IF IE ID 1.C IB 1A 19 18 17 16 15 14 13 12 11 10 OF OE OD OC OB OA 09 OS 07 0€ 05 04 03 02 01 00 00 DO 00 00 00 00 00 00 00 00 00 00 00Miress: |X:7000H运行结果:Address: |X:701CHX:0x007010: 00FF FE FD FC FB FA F9 FB F7X:Qx00701A: F6 FS F4 F3 F2Fl FO EE EE EDX:Qx007024:000000000000000000005. 若完成双字节BCD码加法,应如何修改程序?在ADD A,@RO ”和代码ADDC A,@R1 ”下各加一条代码DA A ”输入数据:运行结果:r2 0«03r3 0x88『4 0x039393+9498+9999+9993=38883 正确本人承诺:本报告内容真实,无伪造数据,无抄袭他人成果。

相关主题