河北工业大学计算机硬件基础课答案_第1页
河北工业大学计算机硬件基础课答案_第2页
河北工业大学计算机硬件基础课答案_第3页
河北工业大学计算机硬件基础课答案_第4页
河北工业大学计算机硬件基础课答案_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 熟悉键盘操作及数传指令编程设计一、 实验目的1 熟悉软件模拟调试的环境及键盘操作。2 掌握汇编语言程序设计的方法,加深对指令的理解。3 学会软件模拟调试和察看修改观察项的方法。二、 实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤1 进入调试软件环境,输入源程序;2 汇编源程序;3 用单步方式运行程序;4 检查并记录各寄存器和存储单元内容的变化。四、程序清单1. 内部RAM数据传送需要查看的数据有30H,31H,A,R0等。ORG 0000H MOV R0,#30

2、H (R0)30HMOV 30H,#45H (30H)45H MOV 31H,#46H (31H)46H MOV R2,30H (R2)45H MOV 02H,31H (02H)46H MOV A,#87H (A)87H MOV 0E0H,30H (A)45H MOV 30H,A (30H)45H MOV 31H,R0 (31H)45H SJMP $ END 最终结果 : (30H)45H (31H)45H (A)45H (R0)30H2. 外部数据传送需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。ORG 0000H MOV A,#89H (A)89H MOV D

3、PTR,#2000H 设DPTR指针地址 MOVX DPTR,A (2000H)89H INC DPTR (DPTR)2001HCLR A (A)0 MOVC A,A+DPTR (A)78H SJMP $ ORG 2000H DB 44H DB 78H DB 67H END最终结果 : (2000H)89H (2001H)78H 3. 堆栈操作需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。1)可用于保护现场和恢复现场的程序ORG 0000H MOV SP,#5FH 设栈顶指针地址MOV 50H,#3BH (50H)3BHMO

4、V 51H,#2FH (51H)2FHMOV A,#12H (A)12H PUSH 50H 入栈 (60H)3BH PUSH 51H (61H)2FH PUSH ACC (62H)12HPOP 0E0H 出栈 (0E0H)12H POP 51H (51H)2FH POP 50H (50H)3BH SJMP $ END 2)可用于数据交换的程序ORG 0100H MOV SP,#6FH 设栈顶指针地址MOV 50H,#3BH (50H)3BHMOV 51H,#2FH (51H)2FH PUSH 50H 入栈 (70H)3BH PUSH 51H (71H)2FH POP 50H 出栈 (50H)2

5、FH POP 51H (51H)3BH SJMP $ END4.数据交换 记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。 ORG 0000H MOV A,#58H (A)58H SWAP A (A)=85H MOV 40H,A (40H)85H MOV A,#30H (A)30H MOV R0,#30H (R0)30H MOV R0,#09H (30H)09H XCHD A,R0 (A)=39H (30H)=00H MOV 50H,#1 (50H)01H MOV A,#89H (A)89H XCH A,50H (50H)=89H (A)=01H MOV R7,#3 (R7)03

6、H XCH A,R7 (A)=03H (R7)=01H XCH A,R0 (30H)=03H (A)=00H SJMP $ END五、 思考题1 寄存器寻址与寄存器间接寻址有什么区别?答:寄存器是将操作数存放在寄存器中,得到了寄存器就得到了操作数.寄存器间接寻址是将指令指定的寄存器内容作为操作数的地址.该地址所指定的单元内容作为被寻找的操作数.寄存器间接寻址用R0(0,1)或DPTR表示,以区别寄存器间接寻址.2 PC指针与SP指针有什么区别?答:PC是一个16位的程序地址寄存器,其内容是当前执行指令的下一条指令在程序地址寄存器的地址,寻址范围达64KB,PC具有自动加一的功能。PC单元本身没

7、有地址,是不可寻址的,用户无法对其进行读写。在堆栈时,SP指针用来存放栈顶地址。SP指针为8位,在片内128B内的RAM中开辟栈区,并随跟踪栈顶地址。SP初始化为07H,只有在进行堆栈操作时,SP指针才会变化。在进行入栈操作时,SP指针自动加1,然后将操作数存入SP指针所指地址。当进行出栈操作时,SP指针将操作数弹入所选地址,然后自动减13 DPTR指针与Ri(R0,R1)指针有什么区别?答:用Ri(0,1)指针可以寻址片内RAM低128B,用DPTR作为间接寻址器,可寻址片外数据存储器的64KB区域。Ri(0,1)与P2配合使用时,用Ri(0,1)指示低8位地址。P2口输出高8位地址。可寻址

8、片外数据存储器或I/O的64KB的区域,DPTR指针还可以访问外部ROM和扩展I/O接口时的地址。4 立即寻址与直接寻址有什么区别?答:立即寻址:指令直接给出操作数;直接寻址:指令中直接给出操作数所在的单元地址或位地址。5.同一个特殊功能寄存器不同表达形式。答:在直接寻址时,寄存器ACC可以表示为 ACC、OEOH,Cy、0D7H、PSW.7、0D0H.7都可以表示Cy,PSW可以表示为0D0H。实验二 数传指令和算数运算指令编程设计一、 实验目的1 掌握数据块的传送操作和算术运算指令的应用。2 进一步掌握汇编语言设计和调试方法。3 掌握观察窗口的使用方法。4 学会给存储单元赋初值的方法。二、

9、 实验内容1 数据区传送(1)把内部RAM 40H4FH置初值0A0H0AFH;(2)而后把40H4FH内容传送到外部RAM 9800H980FH中;(3)再把 9800H980FH内容传送到 50H5FH中。 2多字节十进制加法加数放在30H开始的单元中(最低位放在30H,按从小到大的顺序存放),被加数和结果存放在20H开始的单元(最低位在20H中),字节数放在2FH中,最高进位位放在位地址7FH单元中。三、 实验步骤1 分别用单步和连续运行方式,调试上述两个程序;2 在执行第二个程序之前,给被加数和加数单元赋初值;3 在观察窗口中观察结果。四、 实验程序清单1 数据块传送程序: ORG 0

10、000H MAIN: MOV R0,#40H (R0)40H MOV R2,#10H (R2)10H MOV A,#0A0H (A)0A0H A1: MOV R0, A (40H)0A0H INC R0 (R0)=41H INC A (A)0A1H DJNZ R2, A1 循环指令,循环16次,(A)=0A0H (A)=0B0H(R0)=50H MOV R0, #40H (R0H)40H MOV DPTR, #9800H 设DPTR指针地址 MOV R2, #10H (R2)10H A2: MOV A, R0 (A)0A0H MOVX DPTR, A (9800H)0A0H INC R0 (R

11、0)41H INC DPTR (DPTR)=9801H DJNZ R2, A2 循环指令 MOV R0, #50H (980FH)=0A0FH (A)=0B0H (R0)=50H MOV DPTR, #9800H (DPTR)=9800H MOV R2, #10H (R2)10H A3: MOVX A, DPTR (A)0A0H MOV R0, A (50H)0A0H INC DPTR (DPTR)=9801H INC R0 (R0)=51H DJNZ R2, A3 循环16次, (A)=0AFH (5FH)=0AFH (DPTR)=9810H (R0)=60H SJMP $ END 2 多字

12、节十进制加法: 先赋初值: (30H)=03H (31H)=02H (32H)=01H (20H)=02H (21H)=04H (22H)=07H ORG 0000HMAIN: MOV R0, #30H (R0)30H MOV R1, #20H (R1)20H MOV 2FH,#04H (2FH)04H,为4字节数 CLR C CY清零 DA1: MOV A,R0 (A)03HADDC A, R1 (A)(A)+(20H) DA A 进行十进制调整 MOV R1, A (20H)05H INC R0 (R0)=31H INC R1 (R1)=21H DJNZ 2FH, DA1循环4次, (20

13、H)=05H (21H)=06H (22H)=08H(R0)=34H(R1)=24H MOV 7FH, C C记录最高进位位 (7FH)=0 SJMP $ END 五、 思考题1 若两个数据块都在外部数据存储器中,如何实现数据块的传送?要用寄存器间接寻址。指令为 MOV DPTR, #1010H MOV A, DPTR MOV R0,A 指令时将1010H内容送入R0内容所在地址2 在调试第一个程序时,若不用程序给40H4FH赋初值,而用键盘在CPU DATA区给40H4FH单元预赋初值,如何做?打开“视图”菜单,选择“存储器窗口”,弹出存储器对话框,在MEMORY2地址栏中键入“D:0X00

14、”回车,建立内部数据存储器的观察窗口。找到40H4FH所在位置,分别双击40H4FH所在位置,当有光标出现时,用键盘输入初值。3 若把第二个程序改为无符号数的减法,怎样修改程序? ORG 0000HMAIN: MOV R0, #30H ;存入减数 MOV R1, #20H ;存入被减数 MOV 2FH,#04H CLR C DA1: MOV A,R0SUBB A, R1 DA A MOV R1, A INC R0 INC R1 DJNZ 2FH, DA1 MOV 7FH, C SJMP $ END 4 在第二个程序中,若两数的和存放到从40H开始的单元,如何修改程序? ORG 0000HMAI

15、N: MOV R0, #30H MOV R1, #20H MOV 2FH,#04H MOV DPTR,#40H DA1: MOV A,R0ADDC A, R1 DA A MOVX DPTR, A INC R0 INC DPTR DJNZ 2FH, DA1 MOV 7FH, C SJMP $ END 实验三 逻辑运算及位操作指令编程设计一、 实验目的(1) 熟悉字节逻辑运算指令功能。(2) 熟悉位操作指令运算功能。 (3)从而更深入的掌握汇编语言程序设计。 (4)学会观察CPU窗口中BIT区的变化。二、 实验内容1 字节逻辑运算程序在片内RAM的FIRST和SECOND单元中各有一符号数X和Y,

16、要求按下列条件算出Z,存入RESULT单元中(设运算结果仍为8位数)。X + Y X为正奇数XY X为正偶数XY X为负奇数Z=XY X为负偶数 FIRST EQU 30H SECOND EQU 31H RESULT EQU 32H ORG 0000H START:MOV R0,FIRST MOV A, R0 JB ACC.7, NEG MOV B, #2 DIV AB MOV A, B JZ TEMP1 MOV A,R0 ADD A, SECOND SJMP RES TEMP1: MOV A, R0 ANL A, SECOND SJMP RES NEG: CPL ACC.7 MOV B, #

17、2 DIV AB MOV A, B JZ TEMP2 MOV A, R0 ORL A, SECOND SJMP RES TEMP2: MOV A, R0 XRL A, SECOND RES: MOV RESULT, ASJMP $END 2位操作程序 布尔电路图如下: X BIT 00H Y BIT 01H Z BIT 02H F BIT 03H ORG 0000H利用ANL与ORL来产生异或的效果 START: MOV C, Z (C)02H ANL C, /Y (C)=02H MOV F, C (03H)02H MOV C, Y (C)01H ANL C, /Z (C)=01H ORL C

18、, F (C)=03H MOV F, C (F)03H MOV C, X (C)00H ANL C, Y (C)=00H ORL C, /F (C)=0FCH MOV F, C (F)0FCH SJMP $ END 运算结果为(03H)=0FCH3拆字程序把外部数据存储器2000H单元的内容拆开,其高四位送2001H低四位,低四位送2002H低四位,2001H、2002H高四位清零。 需要检查2000H、 2001H和2002H单元的内容。程序清单ORG 0000HMOV DPTR,#2000H (DPTR)2000HMOVX A,DPTR (A)18HMOV B,A (B)18HSWAP A

19、 (A)=81HANL A,#0FH (A)=01HINC DPTR (DPTR)=2001HMOVX DPTR,A (2001)01HINC DPTR (DPTR)=2002HMOV A,B (A)18HANL A,#0FH (A)=08HMOVX DPTR,A (2002)=08HSJMP $END最终结果:(2000)=18H (2001)=01H (2002)=08H开 始结 束2000H内容送A高低位交换,屏蔽高位后送2001H2000H内容送A屏蔽高位后送2002H程序框图4拼字程序2001H内容送A,屏蔽高位开 始结 束高低位交换,送BA和B或后送2002H2000H内容送A,屏

20、蔽高位把外部数据存储器2000H、2001H单元的低四位分别送2002H高低四位。需要察看2000H、2001H和2002H单元内容。程序框图:程序清单ORG 0000HMOV DPTR,#2000H (DPTR)2000HMOVX A,DPTR (A)18HANL A,#0FH (A)=08HSWAP A (A)=80HMOV B,A (B)80HINC DPTR (DPTR)=2001HMOVX A,DPTR (A)34HANL A,#0FH (A)=04HORL A,B (A)=84HINC DPTR (DPTR)=2002HMOVX DPTR,A (2002)=84HSJMP $END

21、三、 思考题1 字节与位逻辑运算指令在编程上什么区别?应注意什么?字节逻辑运算指令有 ANL,ORL,XRL,RL,RLC,RR,RRC,CLR,CPL。位逻辑运算指令有ANL,ORL,/bit,并且位操作指令的操作数是字节中的某一位,每位只取0或1,位操作指令只能用累加器C.2 若把两位十六进制数转换成对应的ASCII码,应如何编写程序?ORG 0000H MOV R0,#30HMOV 37H,#02H CLR CDA1: MOV A,R0 CJNE A,#10,AA1: JC A3 ADD A,#37H A2: MOV R0,A INC R0 DJNE 37H,DA1 SJMP A4 A3

22、: ADD A,#30H SJMP A2 A4: SJMP $ END 3 采用其它方法设计第一个程序。 FIRST EQU 30H SECOND EQU 31H RESULT EQU 32H ORG 0000H START:MOV R0,FIRST MOV A, R0 JB ACC.7, NEG MOV B, #2 DIV AB MOV A, B JNZ TEMP1 MOV A,R0 JB ACC.7,A1 ANL A,SECOND SJMP RES A1: CPL ACC.7 XRL A,SECOND SJMP RES TEMP1: MOV A, R0 JB ACC.7,A2 ADD A,

23、 SECOND SJMP RES A2: CPL ACC.7 ORL A, SECOND RES: MOV RESULT, ASJMP $END 4 如何用断点方式调试本程序?在开始调试时用断点按钮和光标配合设定断点,然后在调试一栏选择执行到光标处实验四 代码转换一、实验目的1掌握各种代码转换的算法,加深对各种数据编码的理解。2学会软件模拟调试和察看修改观察项的方法来观察转换结果。一、 实验内容1分析清楚个程序的功能。2调试各种代码转换的程序。三、实验步骤1进入调试软件环境,输入源程序;2汇编源程序;3用单步或全速方式运行程序;4查看最终结果。四、程序清单1十六进制数 ASCII码 将十六进制

24、数据08H,0CH转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成十六进制数存入40H,41H两个单元中。ORG 0000HMOV SP,#2FH 设栈顶地址MOV A,#08H (A)08HADD A,#30H (A)=38HPUSH ACC 入栈(30)=38HMOV A,#0CH (A)0CHADD A,#37H (A)43HPUSH ACC 入栈(31H)=43HMOV A,30H (A)38HINC A (A)=39HCLR C CY清零SUBB A,#30H (A)=09HMOV 40H,A (40H)09HPOP A

25、CC 出栈(A)=43HINC A (A)=44HSUBB A,#37H (A)=0DHMOV 41H,A (41H)0DHPOP ACC 出栈(A)=38H SJMP $END最终结果:(30H)=38H (31H)=43H (40H)=09H (41H)=0DH2二进制数 BCD码将二进制数10011011B转换成BCD码数,存入30H和31H单元中;再将30H单元中的数据加16H后,转换成二进制数据,存入40H单元中。ORG 0000HMOV A,#10011011B (A)=98HMOV B,#100 (B)=64HDIV AB (A)=01H(B)=37HMOV 30H,A (30H

26、)01HMOV A,B (A)37HMOV B,#10 (B)=0AHDIV AB (A)=05H (B)=0AHSWAP A (A)=50HORL A,B (A)=55HMOV 31H,A (31H)=55HMOV A,30H (A)=01HADD A,#16H (A)=17HDA A 十进制调整PUSH ACC (08H)=17HANL A,#00001111B (A)=07HMOV 40H,A (40H)=07HPOP ACC (A)=17HANL A,#11110000B (A)=10HSWAP A (A)=01HMOV B,#10 (B)=0AHMUL AB (A)=0AH (B)=

27、00HADD A,40H (A)=11HMOV 40H,A (40H)=11HSJMP $END最终结果:(30H)=01H (31H)=55H (40H)=11H3BCD码 ASCII码 将20H单元中压缩的BCD码数78H转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成压缩BCD码数存入21H单元中。 ORG 0000H MOV A,20H (A)78H ANL A,#00001111B (A)=08H ADD A,#30H (A)=38H MOV 30H,A (30H)38H PUSH ACC (08H)=38H MOV A

28、,20H (A)78H ANL A,#11110000B (A)=70H SWAP A (A)=07H ADD A,#30H (A)=37H MOV 31H,A (31H)37H INC A (A)=38H CLR C CY清零 SUBB A,#30H (A)=08H MOV R2,A (R2)08H POP ACC (A)=38H INC A (A)=39H CLR C CY清零 SUBB A,#30H (A)=09H SWAP A (A)=90H ORL A,R2 (A)=98H MOV 21H,A (21H)98H SJMP $ END最终结果: (21H)=98H5 自选程序设计六、

29、思考题1. 如何查看上面三个程序的结果。第一个程序:调试时,打开“视图”菜单,选择“存储器窗口”,弹出存储器对话框,在MEMORY2地址栏中键入“D:0X00”回车,建立内部数据存储器的观察窗口。找到30H,31H,40H,41H所在位置,打开“调试”菜单,选择单步,按F10键,随着指针的变化,观察30H,31H,40H,41H内容的变化。第二个程序,第三个程序步骤同第一个程序。2. 在程序1中,如果十六进制数未指定是否包含AF数码,程序应如何修改?ORG 0000HMOV SP,#2FHCLR CLCALL A0PUSH ACCMOV A,30HINC ACLR CLCALL A4 MOV

30、40H,APOP ACCINC ALCALL A4MOV 41H,ASJMP $ A0: CJNE A,#10,A1 A1: JC A3 ADD A,#37H A3: ADD A,#30H RET A4: CJNE A,#40H,A5 A5: JC A6 SUBB A,#30H RET END3. 在程序2中,如果要转换的二进制数是十六位的,程序应如何编写?4. 十六进制数转换成ASCII码与BCD码数转换成ASCII码有何区别?十六进制数转化时需要以十为标准确定给这个数加30H还是37H,而BCD码的转换不必进行判断,直接加30H即可实验五 移位操作一、 实验目的:掌握移位操作的方法,并理解

31、左移或右移与乘除法运算的关系。二、 实验内容:1双字节二进制数左移一位将两个内部RAM 31H和30H单元中的内容组成的双字节数通过Cy左移一位。功能示意图Cy31H30H程序清单 ORG 0000HCLR C Y清零MOV A ,30H (A)12HRLC A (A)=24HMOV 30H, A (30H)24HMOV A,31H (A)23HRLC A (A)=46HMOV 31H, A (31H)46HSJMP$END 双字节数2312H左移一位后变成4624H2多字节二进制数右移一位将三个内部RAM 32H、31H和30H单元中的内容组成的三字节数通过Cy右移一位。功能示意图32H31

32、HCy30H程序清单 ORG 0000HCLR C CY清零MOV A,32H (A)45HRRC A (A)=22H CY=1MOV 32H,A (32H)=22HMOV A,31H (A)23HRRC A (A)=91HMOV 31H,A (31H)91HMOV A,30H (A)12HRRC A (A)=89H CY=0MOV 30H,A (30H)89HSJMP $END三字节数452312H右移一位后变成229189H三、 思考题1.多于三个字节的移位操作如何进行?设有N个字节 ORG 0000HMOV 20H,#NHMOV DPTR,#30HCLR C A1: MOVX A,DPTRRRC AMOVX

温馨提示

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

评论

0/150

提交评论