第三章指令系统及汇编语言程序设计 联系客服

发布时间 : 星期一 文章第三章指令系统及汇编语言程序设计更新完毕开始阅读

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