实验一
;1、把R1中内容传送至R0中 org 0000h mov r1,#22h
mov a,r1 mov r0,a
;2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中 mov 20h,#33h mov 30h,20h
;3、把外部数据存储器20H单元中的内容传送至内部数据存储器20H单元中 mov dptr,#20h mov a,#66h movx @dptr,a clr a
movx a,@dptr mov 20h,a
;4、把外部数据存储器20H单元中的内容传送至内部数据存储器20H单元中 mov dptr,#2000h movx @dptr,a clr a
movx a,@dptr mov 20h,a
;5、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中
mov dptr,#2000h clr a
movc a,@a+dptr mov 20h,a sjmp $ org 2000h tab: db 88h end
6.把外部数据存储器2050H单元、2060H单元中的内容相互交换。 mov dptr,#2050h mov a,#55h movx @dptr,a
mov dptr,#2060h mov a,#66h movx @dptr,a clr a
movx a,@dptr push acc
mov dptr,#2050h
movx a,@dptr mov dptr,#2060h movx @dptr,a pop acc
mov dptr,#2050h movx @dptr,a
;8、应用MOVC A,@A+dptr指令求累加器A的平方值Y(设Y<=255),并把结果送至R7中保存。
org 0000h ljmp main org 0030h
main: mov a,#3h ;查3的平方值
mov dptr,#tab ;指向平方表的表头 movc a,@a+dptr ;查表指令 sjmp $
tab:db 0,1,4,9,16,25,36,47,64,81,100,121,144,169,196,255;平方表 end
;实验二
;1、将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H和41H单元中。;注意清借进位标志CY org 0000h clr c
mov r2,#22h mov r3,#33h mov r4,#44h mov r5,#55h mov a,r3 add a,r5 mov 40h,a mov a,r2 addc a,r4 mov 41h,a sjmp $ end
ORG 0
SJMP MAIN
ORG 0030H MAIN:MOV A,R3 CLR C
SUBB A,R5 MOV 42H,A MOV A,R2 SUBB A,R4 MOV 43H,A SJMP $ END
;3.已知在内部数据存储器M1,M2,M3单元中存有三个无符号数X1,X2,X3,请编程将他们相加,并把和存入R0和R1(R0中为高八位)中 M1 EQU 30H M2 EQU 31H M3 EQU 32H ORG 0
MOV R0,#0 MOV R1,#0 MOV A,M1 ADD A,M2 JNC JXJ INC R0 JXJ:ADD A,M3 JC ZJIA M1:MOV R1,A SJMP $ ZJIA:INC R0 SJMP M1 END
;4.被乘数为十六位无符号数(低八位在M1单元,高八位在M1+1单元),乘数为八位无符号数存放在M2单元中,请编程将它们相乘并将积存入R2、R3、R4中(R2存放高八位数,R4存放低八位数) M1 EQU 20H M2 EQU 22H ORG 0 MOV B,M2 MUL AB MOV R4,A MOV R3,B MOV B,M2 MOV A,M1+1 MUL AB ADD A,R3
MOV R3,A MOV A,B ADDC A,#0 MOV R2,A SJMP $ END
;6.试编出能完成以下操作的程序 ;(1)使20H单元中的数的高两位变为0,其余位不变。 ANL A,#3FH
;(2)使20H单元中的数的高两位变为1,其余位不变。 ORL A,#0C0H
;(3)使20H单元中的数的高两位取反,其余位不变。 XRL A,#0C0H
;(4)使20H单元中的数据的所有位变反。 XRL A,#0FFH
实验三 ;1.
BLOCK EQU 30H LEN EQU 20H NUM EQU 21H ORG 0
MOV R0,#BLOCK MOV LEN,#6 LOOP:MOV A,@R0 JB ACC.7,FSCL INC NUM M1:INC R0
DJNZ LEN,LOP SJMP $ FSCL:INC NUM+1 SJMP M1 END
;2、设自变量X为一无符号数,存放在内部数据存储器的VAX单元,函数Y存放在FUNC单元,请编写满足如下关系的程序: ;当x>=50时 y=x; ;当x<50时 y=5x。 VAX equ 30H FUNC equ 40H org 0000h mov VAX,#10 mov a,VAX cjne A,#50,fen1
fen1:jc fen2 ;小于50跳到fen2 sjmp exit1 fen2:mov b,#5 mul ab exit1:mov func,a sjmp $ end ;实验四
;1、在外部数据存储器从2000H到2030H地址单元中存放有一数据块,请将它们分别传送至3000H单元到3030H单元中。
org 0000h
mov dptr,#2000h mov r2,#31h loop:movx a,@dptr mov dph,#30h movx @dptr,a inc dpl
mov dph,#20h djnz r2,loop sjmp $ end
;实验五
;2、将8051片内的数据存储器20H单元中存放的单字节二进制数,转化为ASCII码,存放在30H,31H单元中,(要求将ASCII码转换部分设计为子程序)。
org 0000h mov 20h,#2ah mov a,20h anl a,#0fh acall asc1 mov 30h,a mov a,20h anl a,#0f0h
swap a ;低八位与高八位交换 acall asc1 mov 31h,a sjmp $
asc1:cjne a,#10,fen1 ;ASCII码转换子程序 fen1:jc fen2 add a,#7h