MOV R0,30H 直接寻址 (R0)=40H MOV D0H,R0 直接寻址 (D0H)=40H MOV 10H,#10H 立即寻址 (10H)=10H MOV A,@R0 寄存器间接寻址 (A)=50H MOV P2,P1 寄存器寻址 (P2)=80H 17、完成以下的数据传送过程。 (1)R1的内容传送到R0。
(2)片外RAM 20H单元的内容送R0。
(3)片外RAM 20H单元的内容送片内RAM 20H (4)片外RAM 1000H单元的内容送片内RAM 20H (5)片外RAM 20H单元的内容送R0。
(6)片外RAM 2000H单元的内容送片内RAM 20H (7)片外RAM 20H单元的内容送片外RAM 20H 答:(1)R1的内容传送到R0 ; MOV A, R1
MOV R0, A
(2)片外RAM 20H单元内容送R0 ; MOV DPTR, #0020H MOVX A, @DPTR MOV R0, A
(3)片外 RAM 20H单元的内容送片内RAM 20H单元; MOV DPTR, #0020H MOVX A, @DPTR MOV 20H, A
(4)片外RAM 1000H单元的内容送片内 RAM 20H 单元; MOV DPTR, #1000H MOVX A, @DPTR MOV 20H, A
(5)ROM 2000H单元的内容送R0单元; MOV A, #00H
MOV DPTR, #2000H MOVC A, @A+DPTR MOV R0H, A
(6)ROM 2000H 单元的内容送片内RAM 20H单元; MOV A, #00H
MOV DPTR, #2000H MOVC A, @A+DPTR
MOV 20H, A
(7)ROM 2000H单元的内容送片外RAM 20H单元。 MOV A, #00H
MOV DPTR, #2000H MOVC A, @A+DPTR MOV DPTR, #0020H MOVX @DPTR, A
5
18、设有两个4位BCD码,分别存放在片内RAM的23H,22H单元和33H,32H单元中,求它们的和,并送入43H,42H单元中去。(以上均为低位字节,高位在高字节)。 18、解: ORG 0000H LJMP START ORG 0030H START: MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $ END
19、编程将片内RAM的40H~60H单元中内容送到片外RAM以3000H开始的单元中。
20、已知内部RAM的BLOCK单元开始有一无符号数据块,块长在LEN单元。请编出求数据块中各数累加和并存入SUM单元的程序。
20、编程计算片内RAM区30H~37H的8个单元中数的算术平均值,结果存在3AH单元中。
21、把内部RAM中起始地址为DATA的数据串传送到外部RAM以BUFFER为首地址的区域,直到发现“$“字符的ASCⅡ码为止。同时规定数据串的最大长度为32个字节。
22、设内部RAM的20H和21H单元中有两个带符号数,将其中的大数存放在于22H单元中,编出程序。
23、设有100个有符号数,连续存放在片外RAM以2200H为首地址的存储区中,试片成统计其中正数、负数、零的个数。
24、编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCⅡ存放在于25H开始的单元。 25、试编一查表程序,从首地址为2000H、长度为9FH的数据块中找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中。
26、片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256 27、用查表法编一子程序,将R3中的BCD码转换成ASCII码。
28、片内RAM40H开始的单元内有10个字节的无符号二进制数,编程找出其中最大值并存于50H单元中.
29、编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。
30、设计一个4位数码显示电路,并用汇编语言编程使\从右到左显示一遍。
31、编制一个循环闪烁的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。
32、利用89C51的P1口控制8个发光二极管LED。相邻的4个LED为一组,使2组每隔0.5s 交替发亮一次,周而复始。试编写程序。 19—32编程答案 :
19、解: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R7,#20H
6
MOV R1,#40H
MOV DPTR,#3000H LOOP:MOV A,@R1 MOVX @DPTR,A INC R1 INC DPTR
DJNZ R7,LOOP SJMP $ END
20、解:
参考程序: ORG 0200H LEN:DATA 20H SUM:DATA 21H BLOCK: DATA 22H
CLR A ;A清零
MOV R2,LEN ;块长度送R2 MOV R1,#BLOCK ;块始址送R1 INC R2 ;R2←块长+1 SJMP CHECK
LOOP: ADD A,@R1 ;A←A+(R1) INC R1 ;修改数据块指针R1 CHECK: DJNZ R2,LOOP
MOV SUM,A ;存累加和 END
20、解: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R0,#30H MOV R1,#00H MOV R2,#00H MOV R3,#07H LP2: MOV A,@R0 ADD A,R2 MOV R2,A JNC LP1 INC R1 LP1: INC R0
DJNZ R3,LP2 MOV R3,#03H LP3: CLR C
MOV A,R1 RRC A
MOV R1,A
7
MOV A,R2 RRC A
MOV R2,A DJNZ R3,LP3 MOV 3AH,R2 SJMP $ END
21、解:参考程序: ORG 0200H
MOV R0,#DATA ;DATA为数据区起始地址
MOV DPTR,#BUFFER ;BUFFER为数据区起始地址 MOV R1,#20H ;最大数据串长 LOOP: MOV A,@R0 ;取数据 SUBB A,#24H ;判是否为 $ 符 JZ LOOP1 INC DPTR INC R0
MOVX @DPTR,A ;数据传送 DJNZ R1,LOOP ;循环控制 LOOP1: RET ;结束
22、解:
参考程序:先判两数是否同号,在同号中判大小,异号中正数为大。 MOV A,20H XRL A,21H
ANL A,#80H ;用于判断符号位
JZ CMP ;A为0,说明符号相同,需要比较转移。
JB 20H.7,BG ;A不为0,两数异号,判20H单元是否为正数 MOV 22H,20H SJMP $
BG: MOV 22H,21H SJMP $
CMP: MOV A,20H ;两数同号,比较大小 CJNE A,21H,GR ;影响进位或借位 GR: JNC AG MOV 22H,21H SJMP $
MOV 22H,20H SJMP $
23、解: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R2,#100 MOV R3,#00H
8
相关推荐: