指令系统和汇编语言程序的设计实验Word文档下载推荐.docx
《指令系统和汇编语言程序的设计实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《指令系统和汇编语言程序的设计实验Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
MOV02H,31H
MOVA,#87H
MOV0E0H,30H
MOV30H,A
MOV31H,R0
SJMP$
END
2.外部数据传送
需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。
ORG0000H
MOVA,#89H
MOVDPTR,#2000H
MOVXDPTR,A
INCDPTR
CLRA
MOVCA,A+DPTR
ORG2000H
DB44H
DB78H
DB67H
3.堆栈操作
需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。
1可用于保护现场和恢复现场的程序
MOVSP,#5FH
MOV50H,#3BH
MOV51H,#2FH
MOVA,#12H
PUSH50H
PUSH51H
PUSHACC
POP0E0H
POP51H
POP50H
2可用于数据交换的程序
ORG0100H
MOVSP,#6FH
4.数据交换
记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。
MOVA,#58H
SWAPA
MOV40H,A
MOVA,#30H
MOVR0,#09H
XCHDA,R0
MOV50H,#1
XCHA,50H
MOVR7,#3
XCHA,R7
XCHA,R0
五、思考题
1.寄存器寻址与寄存器间接寻址有什么区别?
2.PC指针与SP指针有什么区别?
3.DPTR指针与Ri(R0,R1指针有什么区别?
4.立即寻址与直接寻址有什么区别?
4.同一个特殊功能寄存器不同表达形式。
实验二数传指令和算数运算指令编程设计
1.掌握数据块的传送操作和算术运算指令的应用。
2.进一步掌握汇编语言设计和调试方法。
3.掌握观察窗口的使用方法。
4.学会给存储单元赋初值的方法。
1.数据区传送
(1把部RAM40H~4FH置初值0A0H~0AFH;
(2而后把40H~4FH容传送到外部RAM9800H~980FH中;
(3再把9800~980FH容传送到50H~5FH中。
2.多字节十进制加法
加数放在30H开始的单元中(最低位放在30H,按从小到大的顺序存放,被加数和结果存放在20H开始的单元(最低位在20H中,字节数放在2FH中,最高进位位放在7FH中的最低位。
三、实验步骤
1.分别用单步和连续运行方式,调试上述两个程序;
2.在执行第二个程序之前,给被加数和加数单元赋初值;
3.在观察窗口中观察结果。
四、实验程序清单
1.数据块传送程序:
MAIN:
MOVR0,#40H
MOVR2,#10H
MOVA,#0A0H
A1:
MOVR0,A
INCR0
INCA
DJNZR2,A1
MOVR0,#40H
MOVDPTR,#9800H
A2:
MOVA,R0
MOVXDPTR,A
DJNZR2,A2
MOVR0,#50H
A3:
MOVXA,DPTR
MOVR0,A
DJNZR2,A3
2.多字节十进制加法:
MOVR0,#30H
MOVR1,#20H
MOV2FH,#04H
CLRC
DA1:
MOVA,R0
ADDCA,R1
DAA
MOVR1,A
INCR1
DJNZ2FH,DA1
MOV7FH,C
五、思考题
1.若两个数据块都在外部数据存储器中,如何实现数据块的传送?
2.在调试第一个程序时,若不用程序给40H~4FH赋初值,而用键盘在CPUDATA区给40H~4FH单元预赋初值,如何做?
3.若把第二个程序改为无符号数的减法,怎样修改程序?
4.在第二个程序中,若两数的和存放到从40H开始的单元,如何修改程序?
实验三逻辑运算及位操作指令编程设计
一、实验目的
(1熟悉字节逻辑运算指令功能。
(2熟悉位操作指令运算功能。
(3从而更深入的掌握汇编语言程序设计。
(4学会观察CPU窗口中BIT区的变化。
1.字节逻辑运算程序
在片RAM的FIRST和SECOND单元中各有一符号数X和Y,要求按下列条件算出Z,存入RESULT单元中(设运算结果仍为8位数。
FIRSTEQU30H
SECONDEQU31H
RESULTEQU32H
START:
MOVR0,FIRST
MOVA,R0
ACC.7,NEG
MOVB,#2
DIVAB
MOVA,B
JZTEMP1
MOVA,R0
ADDA,SECOND
SJMPRES
TEMP1:
ANLA,SECOND
NEG:
CPLACC.7
JZTEMP2
ORLA,SECOND
TEMP2:
XRLA,SECOND
RES:
MOVRESULT,A
Z=
2.位操作程序
布尔电路图如下
:
XBIT00H
YBIT01H
ZBIT02H
FBIT03H
MOVC,Z
ANLC,/Y
MOVF,C
MOVC,Y
ANLC,/Z
ORLC,F
MOVC,X
ANLC,Y
ORLC,/F
3.拆字程序
把外部数据存储器2000H单元的容拆开,其高四位送2001H低四位,低四位送2002H低四位,2001H、2002H高四位清零。
需要检查2000H、2001H和2002H单元的容。
程序清单
MOVXA,DPTR
MOVB,A
ANLA,#0FH
MOVA,B
程序框图
4.拼字程序
把外部数据存储器2000H、2001H单元的低四位分别送2002H高低四位。
需要察看2000H、2001H和2002H
ORLA,B
5.自选程序设计
三、思考题
1.字节与位逻辑运算指令在编程上什么区别?
应注意什么?
2.若把两位十六进制数转换成对应的ASCII码,应如何编写程序?
3.采用其它方法设计第一个程序。
4.如何用断点方式调试本程序?
实验四代码转换
1.掌握各种代码转换的算法,加深对各种数据编码的理解。
2.学会软件模拟调试和察看修改观察项的方法来观察转换结果。
三、实验容
1.分析清楚个程序的功能。
2.调试各种代码转换的程序。
3.用单步或全速方式运行程序;
4.查看最终结果。
1
码
将十六进制数据08H,0CH转换成ASCII码,转换结果存入30H,31H两个单元中,
再将30H,31H两个单元中的数据分别增1,然后转换成十六进制数存入40H,41H两个单元中。
MOVSP,#2FH
MOVA,#08H
ADDA,#30H
MOVA,#0CH
ADDA,#37H
MOVA,30H
SUBBA,#30H
POPACC
SUBBA,#37H
MOV41H,A
2
将二进制数10011011B转换成BCD码数,存入30H和31H单元中;
再将30H单元中的数据加16H后,转换成二进制数据,存入40H单元中。
MOVA,#10011011B
MOVB,#100
MOVB,#10
MOV31H,A
ADDA,#16H
DAAPUSHACCANLA,#00001111BMOV40H,APOPACCANLA,#11110000BSWAPAMOVB,#10MULABADDA,40HMOV40H,ASJMP$END3.BCD码ASCII码将20H单元中压缩的BCD码数78H转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成压缩BCD码数存入21H单元中。
ORG0000HMOVA,20HANLA,#00001111BADDA,#30HMOV30H,APUSHACCMOVA,20HANLA,#11110000BSWAPAADDA,#30HMOV31H,AINCACLRCSUBBA,#30HMOVR2,APOPACCINCACLRCSUBBA,#30HSWAPAORLA,R224
MOVSJMPEND21H,A$5.自选程序设计六、思考题1.如何查看上面三个程序的结果。
2.在程序1中,如果十六进制数未指定是否包含A~F数码,程序应如何修改?
3.在程序2中,如果要转换的二进制数是十六位的,程序应如何编写?
4.十六进制数转换成ASCII码与BCD码数转换成ASCII码有何区别?
实验五移位操作一、实验目的:
实验目的:
掌握移位操作的方法,并理解左移或右移与乘除法运算的关系。
二、实验容:
实验容:
1.双字节二进制数左移一位.将两个部RAM31H和30H单元中的容组成的双字节数通过Cy左移一位。
功能示意图31H30HCy程序清单ORG0000HCLRCMOVA,30HRLCAMOV30H,AMOVA,31HRLCAMOV31H,ASJMP$END2.多字节二进制数右移一位.将三个部RAM32H、31H和30H单元中的容组成的三字节数通过Cy右移一位。
25
功能示意图32HCy31H30H程序清单ORG0000HCLRCMOVA,32HRRCAMOV32H,AMOVA,31HRRCAMOV31H,AMOVA,30HRRCAMOV30H,ASJMP$END三、思考题1.多于三个字节的移位操作如何进行?
2.如果不通过Cy如何移位?
实现的功能有何不同?
第二节汇编语言程序设计实验实验六分支程序设计一、实验目的1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
2.掌握分支结构程序设计的方法。
3.学会用条件转移指令、CJNE、JMP及其配合使用来编写二分支、三分支和多分支程序。
二、实验容1.二分支的条件转移程序设变量X存放于R0,函数值Y存放在R1,其中X、Y均为二进制数。
试按照下式的要求给Y赋值:
26