1、南昌大学微型计算机原理与接口技术实验报告全(此文档为word格式,下载后您可任意编辑修改!)实验一:汇编语言程序设计开发环境实验目的1、熟悉汇编语言设计开发环境2、巩固对程序基本结构的认识3、学会使用debug命令查看结果实验步骤:1、打开电脑在系统选择界面,选择DOS操作系统2、通过键盘输入TC,进入TC操作界面。在TC操作见面,新建文件,将实验程 序写入文件中,然后保存为.ASM文件。退出TC操作界面3在DOS操作界面,写入MASM,和刚才的ASM文件名。产生目标文件。4、调用 link文件,链接目标文件,产生可执行文件5、再键入debug 12.exe(12为对应文件的文件名)来运行程序
2、。我们的目的是要察看我们程序的运行结果,因此我们希望的动程序运行后应停在返回DOS以前,为此我们可先用反汇编命令U来确定我们所要的断点地址。编写汇编程序,实现Z=X+;程序如下:DATA SEGMENT X DB 18H Y DB 19H Z DB ?DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AL,XADD AL,Y DAA MOV Z,ALRETMAIN ENDPCODE ENDSEND START先退出DOS系统。
3、先输入MASM 12.ASM后,看有没有错误,如果有错误就返回去修改程序,反复调试,直到没有错误为止。再输入LINK 12.OBJ再输入DEBUG 12.exe再按U。设置好断点以后再输入G加断点地址。实验结果-u1489:0000 1E PUSH DS 1489:0001 2BC0 SUB AX,AX 1489:0003 50 PUSH AX 1489:0004 B88814 MOV AX,1488 1489:0007 8ED8 MOV DS,AX 1489:0009 A00000 MOV AL,0000 1489:000C ADD AL,0001 1489:0010 27 DAA 1489
4、:0011 A20200 MOV 0002,AL 1489:0014 CB RETF 1489:0015 D1E3 SHL BX,1 1489:0017 D1E3 SHL BX,1 1489:0019 8B360406 MOV SI,0604 1489:001D EBA2 JMP FFC1 1489:001F 90 NOP -u1489:0020 C746FC0000 MOV WORD PTR BP-04,0000 1489:0025 EB1F JMP 0046 1489:0027 90 NOP 1489:0028 8A4608 MOV AL,BP+08 1489:002B 2AE4 SUB
5、AH,AH 1489:002D 50 PUSH AX 1489:002E 8B5EFC MOV BX,BP-04 1489:0031 D1E3 SHL BX,1 1489:0033 D1E3 SHL BX,1 1489:0035 8B7604 MOV SI,BP+04 1489:0038 FF7002 PUSH BX+SI+02 1489:003B FF30 PUSH BX+SI 1489:003D E854FE CALL FE94 -g0014AX=1437 BX=0000 CX=0025 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000 DS=1488 ES=
6、1478 SS=1488 CS=1489 IP=0014 NV UP EI PL NZ AC PO NC 1489:0014 CB RETF -d1488:00001488:0000 18 19 37 00 00 00 00 00-00 00 00 00 00 00 00 00 .7.1488:0010 1E 2B C0 50 B8 88 14 8E-D8 A0 00 00 02 06 01 00 .+.P.1488:0020 27 A2 02 00 CB D1 E3 D1-E3 8B 36 04 06 EB A2 90 .6.1488:0030 C7 46 FC 00 00 EB 1F 90
7、-8A 46 08 2A E4 50 8B 5E .F.F.*.P.1488:0040 FC D1 E3 D1 E3 8B 76 04-FF 70 02 FF 30 E8 54 FE .v.p.0.T.1488:0050 83 C4 06 FF 46 FC 8B 46-06 39 46 FC 72 DA 5E 8B .F.F.9F.r.1488:0060 E5 5D C3 90 55 8B EC 56-C4 5E 04 26 80 7F 04 03 .U.V.&.1488:0070 75 07 26 80 7F 0A 00 74-37 A1 58 27 39 06 36 22 u.&.t7.X
8、9.6-q实验心得:这是我第一次在pc机上运用DOS系统来编程,有很多不懂,感觉很陌生。在进入TC,和文件的保存,以及程序的编译都感觉很陌生。但是有了这一次的接触,以后会更轻松。这次主要是熟悉了汇编的环境,对于程序来说,只要熟悉了汇编语言的基本环境,本次程序比较简单。运行的结果很顺利。实验二、字符串的传送一、 实验目的:1. 掌握变量的基本使用方法。2. 掌据字符串的输入传送方法的使用。3. 掌握数据段的定义方式二、实验内容编程实现将X中的40个字符存储在Y中,并调试程序。三、实验程序如下:DATA SEGMENTX DB 40 DUP(B)DATA ENDSEXTRA SEGMENTY DB
9、 40 DUP (?)EXTRA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX LEA SI,X LEA DI,Y CLD MOV CX,40 REP MOVSB RETMAIN ENDPCODE ENDSEND START四、实验结果先退出DOS系统。先输入MASM 12.ASM后,看有没有错误,如果有错误就返回去修改程序,反复调试,直到没有错误为止。再输入LINK
10、 12.OBJ再输入DEBUG 12.exe再按U。设置好断点以后再输入G加断点地址。查看数据段是输入D1488:0000显示结果:-u148C:0000 1E PUSH DS 148C:0001 2BC0 SUB AX,AX 148C:0003 50 PUSH AX 148C:0004 B88814 MOV AX,1488 148C:0007 8ED8 MOV DS,AX 148C:0009 B88A14 MOV AX,148A 148C:000C 8EC0 MOV ES,AX 148C:000E 8D360000 LEA SI,0000 148C:0012 8D3E0000 LEA DI,
11、0000 148C:0016 B91300 MOV CX,0013 148C:0019 FC CLD 148C:001A F3 REPZ 148C:001B A4 MOVSB 148C:001C CB RETF 148C:001D DA5E8B FICOMP DWORD PTR BP-75 -u148C:0020 E55D IN AX,5D 148C:0022 C3 RET 148C:0023 90 NOP 148C:0024 55 PUSH BP 148C:0025 8BEC MOV BP,SP 148C:0027 56 PUSH SI 148C:0028 C45E04 LES BX,BP+
12、04 148C:002B 26 ES: 148C:002C 807F0403 CMP BYTE PTR BX+04,03 148C:0030 7507 JNZ 0039 148C:0032 26 ES: 148C:0033 807F0A00 CMP BYTE PTR BX+0A,00 148C:0037 7437 JZ 0070 148C:0039 A15827 MOV AX,2758 148C:003C CMP 2236,AX -g001cAX=148A BX=0000 CX=0000 DX=0000 SP=FFFC BP=0000 SI=0013 DI=0013 DS=1488 ES=14
13、8A SS=1488 CS=148C IP=001C NV UP EI PL ZR NA PE NC 148C:001C CB RETF -d1488:00001488:0000 50 45 52 53 4F 4E 41 4C-20 43 4F 4D 50 55 54 45 PERSONAL COMPUTE1488:0010 52 24 00 00 00 00 00 00-00 00 00 00 00 00 00 00 R$.1488:0020 50 45 52 53 4F 4E 41 4C-20 43 4F 4D 50 55 54 45 PERSONAL COMPUTE1488:0030 5
14、2 24 00 00 00 00 00 00-00 00 00 00 00 00 00 00 R$.1488:0040 1E 2B C0 50 B8 88 14 8E-D8 B8 8A 14 8E C0 8D 36 .+.P.61488:0050 00 00 8D 3E 00 00 B9 13-00 FC F3 A4 CB DA 5E 8B .1488:0060 E5 5D C3 90 55 8B EC 56-C4 5E 04 26 80 7F 04 03 .U.V.&.1488:0070 75 07 26 80 7F 0A 00 74-37 A1 58 27 39 06 36 22 u.&.
15、t7.X9.6-d148a:0000148A:0000 50 45 52 53 4F 4E 41 4C-20 43 4F 4D 50 55 54 45 PERSONAL COMPUTE148A:0010 52 24 00 00 00 00 00 00-00 00 00 00 00 00 00 00 R$.148A:0020 1E 2B C0 50 B8 88 14 8E-D8 B8 8A 14 8E C0 8D 36 .+.P.6148A:0030 00 00 8D 3E 00 00 B9 13-00 FC F3 A4 CB DA 5E 8B .148A:0040 E5 5D C3 90 55
16、 8B EC 56-C4 5E 04 26 80 7F 04 03 .U.V.&.148A:0050 75 07 26 80 7F 0A 00 74-37 A1 58 27 39 06 36 22 u.&.t7.X9.6148A:0060 72 14 BE 36 22 8B 1C FF-04 2B D8 D1 E3 D1 E3 8B r.6.+.148A:0070 36 04 06 EB 10 90 BE 36-22 8B 1C FF 04 D1 E3 D1 6.6.-q实验心得:这次是做字符串传送的实验这套程序在课堂上讲过,所以编程序的时候也比较轻松。在调试阶段要注意,本次调试我的断点设置出
17、错,所以导致了输出结果的错误,这个问题以后应该注意,要知道自己所需要的断点在哪。不能搞错,否则输出的结果就会有问题。还有就是输入程序的时候要小心,不能按错键,如果按错了键,在编译的时候会错,要返回去tc中改程序,调试程序的时候耐心也是很重的实验三、键盘输入与回显实验目的:1、熟悉DOS功能的9号功能,从键盘输入并在显示器上显示字符串2、熟悉DOS功能调用指令INT 21H 实验原理:1、单字符输入功能号1、7和8都可以接收键盘输入的单字符串,输入字符以ASCII码形式 存放在累加器AL中。其中7号和8号功能无回显。2、字符串输入输入字符串可以通过调用DOS功能的0AH号功能实现。3、单宇符显示
18、在显示器上显示的内容都是字符形式,如果是数字,则一定是其对应的ASCII 码。要将一个字符串送到显示器显示,可调用DOS功能的2、6、9号功能实现。其中2、6用于显示单个字符,功能9显示一个字符帀。4、字符中显示要在从示器上显示字符串,可调用DOS功能的9号功能,该功能要求被显示的字符串必须“$”以字符作为结束符,否则会引起屏幕混乱。5、返回DOS用 4CH号功能返回DOS的程序段:MOV AH,4CHINT 21H 实验内容:从键盘读入一串字符,在字符串尾插入一个“$”,并显示该字符。实验程序如下:DATA SEGMENTBUFSIZE DB 50ACTLEN DB ?CHARS DB 50
19、 DUP(20H)DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX LEA DX,BUFSIZE MOV AH,0AH INT 21H XOR CX,CX MOV CL,ACTLEN MOV DX,OFFSET CHARS MOV BX,DX ADD BX,CX MOV BYTE PTRBX,$ MOV AH,09H INT 21H MOV AH,02H MOV DL,0AH INT 21H MOV DL,0DH INT 2
20、1H MOV AH,09H LEA DX,CHARS INT 21H MOV AH,4CH INT 21H MAIN ENDP CODE ENDS END START实验结果:随机输入一串不超过50个字符的字符串,按enter键之后,字符串会重新显示。在屏幕上。屏幕显示为:1D08:0000 1E PUSH DS 1D08:0001 2BC0 SUB AX,AX 1D08:0003 50 PUSH AX 1D08:0004 B8041D MOV AX,1D04 1D08:0007 8ED8 MOV DS,AX 1D08:0009 8D160000 LEA DX,0000 1D08:000D B
21、40A MOV AH,0A 1D08:000F CD21 INT 21 1D08:0011 33C9 XOR CX,CX 1D08:0013 8A0E0100 MOV CL,0001 1D08:0017 BA0200 MOV DX,0002 1D08:001A 8BDA MOV BX,DX 1D08:001C 03D9 ADD BX,CX 1D08:001E C60724 MOV BYTE PTR BX,24 -U1D08:0021 B409 MOV AH,09 1D08:0023 CD21 INT 21 1D08:0025 B402 MOV AH,02 1D08:0027 B20A MOV
22、DL,0A 1D08:0029 CD21 INT 21 1D08:002B B20D MOV DL,0D 1D08:002D CD21 INT 21 1D08:002F B409 MOV AH,09 1D08:0031 8D160200 LEA DX,0002 1D08:0035 CD21 INT 21 1D08:0037 B44C MOV AH,4C 1D08:0039 CD21 INT 21 1D08:003B 00740D ADD SI+0D,DH 1D08:003E FF360406 PUSH 0604 -G37CHENLIHUAGDAKSGCHENLIHUAGDAKSGAX=0924
23、 BX=0011 CX=000F DX=0002 SP=FFFC BP=0000 SI=0000 DI=0000 DS=1D04 ES=1CF4 SS=1D04 CS=1D08 IP=0037 NV UP EI PL NZ AC PE NC 1D08:0037 B44C MOV AH,4C -Q实验心得体会: 本次试验因为还没有学过,对DOS系统的功能的调用很陌生。所以本次编程的时候感觉很痛苦,编程的时候对着书看了很长时间,才慢慢的知道实验程序的编写。在实验室悟了好长时间才悟懂DOS功能的调用显示和地址的灵活用法。我忘了一“$”,所以电脑一直在那里响。最后我加上“$”符号后,程序才顺利执行完。
24、这次实验做得很艰难,一开始有很多迷惑,经过实践之后迷惑就消除了。实验四:子程序设计(计算N!)实验目的:1、通过调用求N!的子程序求一个数的阶乘2、掌握子程序的设计方法,调用方法,返回方法3、学会一种算法:递归调用实验内容:堆栈保护及递归算法,用递归算法计算5!,实验程序如下: DATA SEGMENTN DW 5RESULT DW ?DATA ENDSSTACKSEG SEGMENTDW 128 DUP(0)TOS LABEL WORDSTACKSEG ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,SS:STACKSEGSTART:M
25、OV AX,STACKSEG MOV SS,AX MOV SP,OFFSET TOS PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV BX,N PUSH BX CALL FACT POP RESULT RETMAIN EDNPFACT PROC NEAR PUSH AX PUSH BP MOV BP,SP MOV AX,BP+6 CMP AX,0 JNZ FACT1 INC AX JMP EXITFACT1:DEC AX PUSH AX CALL FACT POP AX MUL BP+6EXIT:MOV BP+6,AX POP BP PO
26、P AX RETFACT ENDPCODE ENDS END START实验结果先退出DOS系统。先输入MASM 12.ASM后,看有没有错误,如果有错误就返回去修改程序,反复调试,直到没有错误为止。再输入LINK 12.OBJ再输入DEBUG 12.exe再按U。设置好断点以后再输入G加断点地址。查看数据段是输入D:DS 0结果显示:-u13E1:0000 B8D113 MOV AX,13D1 13E1:0003 8ED0 MOV SS,AX 13E1:0005 BC0001 MOV SP,0100 13E1:0008 1E PUSH DS 13E1:0009 2BC0 SUB AX,AX
27、13E1:000B 50 PUSH AX 13E1:000C B8D013 MOV AX,13D0 13E1:000F 8ED8 MOV DS,AX 13E1:0011 8B1E0000 MOV BX,0000 13E1:0015 53 PUSH BX 13E1:0016 E80500 CALL 001E 13E1:0019 8F060200 POP 0002 13E1:001D CB RETF 13E1:001E 50 PUSH AX 13E1:001F 55 PUSH BP -u13E1:0020 8BEC MOV BP,SP 13E1:0022 8B4606 MOV AX,BP+06 1
28、3E1:0025 3D0000 CMP AX,0000 13E1:0028 7504 JNZ 002E 13E1:002A 40 INC AX 13E1:002B EB0A JMP 0037 13E1:002D 90 NOP 13E1:002E 48 DEC AX 13E1:002F 50 PUSH AX 13E1:0030 E8EBFF CALL 001E 13E1:0033 58 POP AX 13E1:0034 F76606 MUL WORD PTR BP+06 13E1:0037 894606 MOV BP+06,AX 13E1:003A 5D POP BP 13E1:003B 58
29、POP AX 13E1:003C C3 RET 13E1:003D 7421 JZ 0060 13E1:003F 8B9E72FF MOV BX,BP+FF72 -g001dAX=13D0 BX=0003 CX=014D DX=0000 SP=00FC BP=0000 SI=0000 DI=0000 DS=13D0 ES=13C0 SS=13D1 CS=13E1 IP=001D NV UP EI PL NZ NA PE NC 13E1:001D CB RETF -d13d0:000013D0:0000 03 00 78 00 00 00 00 00-00 00 00 00 00 00 00 00 .13D0:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13D0:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13D0:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1