《单片机汇编》期末考试、考研常见考题、习题,题型汇总(十五)

题42

编写把四位BCD码转换为二进制数的子程序。

程序源码:

;子程序入口参数:4位BCD码数分别存入4个内存单元,(R0)=千位数码地址,(R2)=3
;子程序出口参数:转换后的二进制数结果存入R3(高字节),R4(低字节)
	ORG 0000H
	MOV R3,#00H
	MOV A,@R0
	MOV R4,A
DB1:
	MOV A,R4
	MOV B,#10
	MUL AB
	MOV R4,A
	XCH A,B
	MOV B,#10
	XCH A,R3
	MUL AB
	ADD A,R3
	XCH A,R4
	INC R0
	ADD A,@R0
	XCH A,R4
	ADDC A,#0
	MOV R3,A
	DJNZ R2,DB1
	END

强化指令2:DA A

***已知( A)=59H,执行指令 INC A 后,( A)= 5A H ,继续执行 DA A 后,(A)= ? ***

答案:

(A)=  60 H

小知识点补充9:
程序状态字PSW

	PSW.7:Cy进位标志
	PSW.6:Ac半进位标志
	PSW.5:F0用户设定标志
	PSW.4:RS1 4组工作寄存器组选择控制位
	PSW.3:RS0 4组工作寄存器组选择控制位
	PSW.2:OV溢出标志
	PSW.0:P奇偶校验位  P=1表示A中有奇数个1
备注:
RS1  RS0:  00 内部RAM:00H-07H  01 内部RAM:08H-0FH  10 内部RAM:10H-17H   11 内部RAM:18H-1FH

小知识点补充10:(与单片机C语言有关)
C51变量的存储类型

存储器类型						描述
data					直接寻址内部数据存储区,访问变量速度最快(128B)  
bdata				可位寻址内部数据存储区,允许位与字节混合访问(16B)
idata			间接寻址内部数据存储区,可访问全部内部地址空间(256B)
pdata			分页(256B)外部数据存储区,由MOVX @Ri类指令访问
xdata			外部数据存储区(64KB),由MOVX @DPTR类指令访问
code			程序存储区(64KB),由MOVC类指令访问

C51的存储器模式

存储器模式		默认存储器模式				特点
SMALL		    data            小模式,变量默认在片内RAM,空间小,速度快		
COMPACT			pdata        紧凑模式,变量默认在片外RAM的页(256B,页号由P2口决定)
LARGE			xdata      大模式,变量默认在片外RAM的64KB的范围内,空间大,速度慢

sfr:对特殊功能寄存器定义
sbit:对可独立寻址的位变量的定义

absacc.h中的内容:

/*--------------------------------------------------------------------------
ABSACC.H
Direct access to 8051, extended 8051 and Philips 80C51MX memory areas.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __ABSACC_H__
#define __ABSACC_H__
#define CBYTE ((unsigned char volatile code  *) 0)
//访问code字符型
#define DBYTE ((unsigned char volatile data  *) 0)
//访问data区字符型
#define PBYTE ((unsigned char volatile pdata *) 0)
//访问pdata或IO区字符型
#define XBYTE ((unsigned char volatile xdata *) 0)
//访问xdata或IO区字符型
#define CWORD ((unsigned int volatile code  *) 0)
#define DWORD ((unsigned int volatile data  *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)
#ifdef __CX51__
#define FVAR(object, addr)   (*((object volatile far *) (addr)))
#define FARRAY(object, base) ((object volatile far *) (base))
#define FCVAR(object, addr)   (*((object const far *) (addr)))
#define FCARRAY(object, base) ((object const far *) (base))
#else
#define FVAR(object, addr)    (*((object volatile far *) ((addr)+0x10000L)))
#define FCVAR(object, addr)   (*((object const far *) ((addr)+0x810000L)))
#define FARRAY(object, base)  ((object volatile far *) ((base)+0x10000L))
#define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
#endif
#endif

概念考题1:在 MCS-51中需要外加电路实现中断撤除的是( B )
A.定时中断 B. 脉冲触发方式的外部中断
C.串行中断 D. 电平触发方式的外部中断

小知识点补充11:
SJMP、AJMP和 LJMP的异同点

SJMP:相对寻址方式转移指令,短转移指令,转移范围为当前 PC的值的 -128~127
字节。
AJMP:绝对转移指令,转移范围为当前PC值所在的页面 2K范围内。
LJMP:长转移指令。转移范围为64K,与当前PC值无关

题43

内部 RAM 60H 和 70H开始的单元分别存放着 16 个 16 进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部 RAM 1000H 开始的单元中。

解析:
每个单元存放 2 个 16 进制数, 故 16 个 16 进制数占用 8 个单元

程序源码:

 	ORG 0000H 
 	LJMP START 
 	ORG 0030H 
START: 
	MOV R0,#60H 
 	MOV R1,#70H 
 	MOV DPTR,#1000H 
 	CLR C
 	MOV R2,#08H 
LOOP:
	 MOV A,@R0 
	 ADDC A,@R1 
 	 MOVX @DPTR,A 
 	 INC R0 
 	 INC R1 
 	 INC DPTR 
	 DJNZ R2,LOOP 
 	 SJMP $ 
 	 END

题44

请编写多字节无符号数减法程序。被减数存放在内部 RAM 20H开始的 8 个单元中,减数存放在内部 RAM 30H开始的 8 个单元,请将差存放到外部 RAM 1000H开始的 8 个单元中,借位存放到 OV标志中。
注意:所有数据均按照从低字节到高字节的顺序存放。

备注:前文有类似题

程序源码:

	ORG 0000H 
 	LJMP START 
 	ORG 002FH 
START:
	MOV R0,#20H 
 	MOV R1,#30H 
    MOV DPTR,#1000H 
    MOV R7,#08H 
    CLR C 
LOOP :
    MOV A,@R0 
 	SUBB A,@R1 
 	MOVX @DPTR,A 
 	INC R0 
 	INC R1
 	INC DPTR 
	DJNZ R7,LOOP 
 	MOV OV,C 
 	SJMP $ 
 	END
原创文章 59 获赞 52 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liuxianfei0810/article/details/105663553