1.分别从ROM的1000H和1020H单元开始,按顺序存放0~9中每个整数的平方值和字符串“An apple!”
ORG 1000H
DATA1: DB 0,1,4,9,16,25,36,49,64,81
ORG 1020H
DATA2: DB "An apple!"
END
2.将外部RAM 1000H单元的内容清零
ORG 0000H
LJMP START
START: MOV DPTR,#1000H
MOV A,#0
MOVX @DPTR,A
END
3.在外部ROM从3000H单元开始存放了一个字节型数组,该数组中的数据依次是0~9之间整数的平方,编程采用查表的方法求出5的平方。
ORG 0000H
LJMP START
START: MOV DPTR,#3000H ;DPTR指向表头
MOV A,#5
MOVC A,@A+DPTR ;查表并将结果存于A中
MOV 50H,A ;存平方值
NOP
ORG 3000H
DB 0,1,4,9,16,25,36,49,64,81
END
ORG 0000H
MOV DPTR,#TABLE ;DPTR指向表头
MOV A,#5
MOVC A,@A+DPTR
MOV 50H,A
NOP
TABLE: DB 0,1,4,9,16,25,36,49,64,81
END
4.近程查表实现3中的功能
ORG 0000H
LJMP START
START: MOV A, #5 ;机器码为7405H
MOVC A,@A+PC ;机器码83H
TABLE:DB 0,1,4,9,16,25,36,49,64,81
END
5.利用ADDC指令编写计算9878H+8934H的汇编语言源程序。
假设:被加数放在内部RAM: 31H、32H单元(低位在前),
加数放在内部RAM: 33H、34H单元(低位在前),
和存于 :35、36H 单元,
进位位 :37H 单元。
ORG 0000H
LJMP START
START: MOV 31H,#78H
MOV 32H,#98H
MOV 33H,#34H
MOV 34H,#89H
MOV A,33H
ADD A,31H
MOV 35H,A
MOV A,34H
ADDC A,32H ;注意这里的用法
MOV 36H,A
MOV A,#0
ADDC A,#0
MOV 37H,A
END
6.分析下段指令执行后A、B以及标志位CY、OV和P的值。
ORG 0
START: MOV A, #95
MOV B, #48
MUL AB
NOP
END
本段指令执行后(A)=0D0H,(B)=11H,(CY)=0,(OV)=1,(P)=1。
设(A)=17,(B)=4,执行指令:
DIV AB
结果为:(A)=4,(B)=1,CY=0,OV=0。
7.编写一程序,实现将累加器A中的无符号十六进制数转换为3位BCD码,并将BCD码的百位、十位和个位分别存放在内部RAM的30H、31H和32H单元。
ORG 0000H
START: MOV A, #0BDH ; 送被分离的数
MOV B, #100 ; 除数送B
DIV AB ; 相除,分离出百位
MOV 30H, A ; 保存百位
MOV A, B ; 余数送A
MOV B, #10 ; 除数送B
DIV AB ; 分离十位和各位
MOV 31H, A ; 保存商,即十位数
MOV 32H, B ; 保存余数,即个位数
END
8.如果使与P1口相连的发光二极管从LED0到LED7依次点亮,每次只亮1个,编写汇编语言程序实现该功能
ORG 0000H
START: MOV A,#0FEH ; 循环时的初始数据
MOV P1,A ; 点亮LED0
RL A
MOV P1,A ; (P1) = 0FCH
RL A
MOV P1,A ; (P1) = 0FBH
RL A
MOV P1,A ; (P1) = 0F7H
RL A
MOV P1,A ; (P1) = 0EFH
RL A
MOV P1,A ; (P1) = 0CFH
RL A
MOV P1,A ; (P1) = 0BFH
RL A
MOV P1,A ; (P1) = 7FH
END
9.用LJMP编写汇编语言源程序使图2-1的LED从LED0到LED7依次单个点亮,且如此循环。
ORG 0000H
START: MOV A,#0FEH
NEXT: MOV P1,A
RL A
LJMP NEXT
END
10.将外部数据存储器RAM从1000H开始的连续单元的数据,传送到内部RAM从40H开始的连续单元,所传送的数据为零时,传送停止。
MOV DPTR,#1000H
MOV R0, #40H
LOOP: MOVX A,@DPTR
JZ NEXT
MOV @R0,A
INC DPTR
INC R0
SJMP LOOP
NEXT: END
11.某温室内的温度要求控制在15~30℃之间,采集的温度值T放在累加器A中。若采集到的温度T>30℃,程序转向JW(降温处理程序);若T<15,则程序转向SW(升温处理程序);若30℃≥T≥15℃,则程序转向FH(返回主程序)。
CJNE A,#30,LOOP1
AJMP FH ;(A) =30
LOOP1: JNC JW ;(A) >30
CJNE A,#15,LOOP2 ;(A) <30
AJMP FH ;(A) =15
LOOP2: JC SW ;(A) <15
AJMP FH ;(A) >15
JW: ____
SW: ___
FH: RET
12.把内部RAM 50H~6FH单元的内容清零
ORG 0000H
START: MOV R0, #50H
MOV R1, #20H ; 给R1装载循环次数
MOV A, #0
LOOP: MOV @R0, A ; 清零
INC R0 ; 修改指针
DJNZ R1, LOOP ; 循环控制
END
13.把内部RAM 50H~6FH单元的内容清零
ORG 1000H
START1:MOV R0, #20H ;循环次数
MOV DPTR,#5000H ;
MOV A, #00H ;(A)=0
LOOP1: MOVX @DPTR,A ;(DPTR)=0
INC DPTR ;外部RAM单元加1
DJNZ R0,LOOP1 ;减1非0则转移
END
14.将内部RAM中20H单元的第6位(位地址为06H)的内容,传送到P1.0中。
MOV C,06H
MOV C,20H.6
MOV P1.0,C
15.某系统具有三人表决器的功能,如图所示。当某人同意时,将开关闭合。当两人及三人同意时表示通过,此时与P1.7相连的LED被点亮。编程实现此功能。
ORG 0
START: NOP
X BIT P1.0
Y BIT P1.1
Z BIT P1.2
F BIT P1.7
MOV C, X
CPL C
ANL C, /Y
MOV F, C
MOV C, X
CPL C
CPL C
ANL C, /Z
ORL C, F
MOV F, C
MOV C, /Y
CPL C
ANL C, /Z
ORL C, F
MOV F, C
END
16.统计从内部RAM 30H开始的20个数据中正数(包括0)和负数的个数,并将统计的正数和负数结果分别存放在内部RAM的50H和51H单元。
ORG 0
START:
MOV R0, #30H ; 设置地址指针
MOV R1, #20 ; 初始化循环次数
MOV 50H, #0 ; 统计次数清0
MOV 51H, #0
REP:
MOV A, @R0 ; 取数据
JB ACC.7, NEG ; 判断最高位是否为1
INC 50H ; 正数次数加1
SJMP QUIT
NEG:
INC 51H ; 负数次数加1
QUIT:
DJNZ R1, REP ; 次数未到,则从REP处循环
END