第3章-MCS-51系列单片机的指令系统和汇编语言程序 下载本文

3·1·40下列程序段经汇编后,从1000H开始的各有关存储单元的内容将是什么? ORG l000H TABl: EQU 1234H TAB2:EQU 3000H DB \ DW TABl,TAB2 3·2汇编语言程序

3·2·1综述汇编语言程序的书写格式。

3·2·2要将片内RAM 0FH单元的内容传送去专用寄存器B,对OFH单元的寻址可有三种 办法:

(l)R寻址 (2)R间址 (3)direct寻址

请分别编出相应程序,比较其字节数、机器周期数和优缺点。 3·2·3设 (R0)=7EH, (DPTR)=l0FEH 片内RAM 7E单元的内容为0FFH 7F单元的内容为38H 试为下列程序的每条指令注释其执行结果。

INC @R0 INC R0 INC @R0 INC DPTR INC DPTR TNC DPTR

3·2·4试编程:引用\与\运算,判断某8位二进制数是奇数还是偶数。 3·2·5试编程:引用\或\运算,使任意8位二进制数 的符号位必为\。

3·2·6请思考:引用\异或\运算,怎样可使一带符号 数的符号位改变、数据位不变;怎样可使该数必然变 \

3·2·7要选择工作寄存器组,可有几种编程办法?

3·2·8 某压力测试的线性处理程序如下,如A/D转换器 的输出为02H,问执行程序后(A)=? MOV P1,#0FFH MOV A,P1

MOVC A,@A+PC TAB: DB 00H DB 00H DB 01H

DB 02H ;

DB FEH

END

3·2·9 设ROM、片内RAM、RAM各有关单元的内容示如下图,问执行下列程序段后(A)=?

0000 AJMP 030H

ORG 0030H 0030 MOV R0,#32H MOV A,@R0 MOV R1,A MOVX A,@R1

MOVC A,@A+DPTR

3·2·10若在片内RAM 30H单元中有2位压缩的BCD码95H,间执行下列程序后,片内 RAM 30H单元的内容是什么?31H、32H的内容又是什么?并写出BCD码十进制调整的过程。 MOV R0,#30H MOV A,@R0 ANL A,#0FH MOV R3,A MOV A,@R0 SWAP A

ANL A,#0FH ADD A,R3 DA A

MOV @R0,A MOV R3,A INC R0

ANL A,#0FH MOV @R0,A INC R0 MOV A,R3 ANL A,#0F0H SWAP A

MOV @R0,A RET

3·2·11有程序如下:

CLR C CLR RS1 CLR RS0

MOV A,#38H

MOV R0,A MOV 29H,R0 SETB RS0 MOV Rl,A MOV 26H,A MOV 28H,C

请: (1)区分哪些是位操作指令?哪些是字节操作指令? (2)写出程序执行后,片内RAM有关单元的内容。 (3)译成机器码。

(4)按汇编语言程序的标准格式书写,要求有各条指令的存放地址和必要的注释。 (5)如fOSC=l2MHz,计算这段程序的执行时间。

3·2·12 试编程:将两个4位二进制数并存于一个字节。 3·2·13 试编程:将存于片内RAM 40H、41H单元中的16位数求补,结果放回原单元 (低 字节放40H单元)。

3·2·14 试编程:有两双字节压缩的BCD码数相加,设该两待加数分别按先低后高原则存放在30H、31H和40H、41H单元,和要求放回30H、31H单元。 3·2·15 试编程:将累加器A内容低4位送片外RAM 7AH单元,高4位送片外RAM 7BH 单元,7AH、7BH单元的高4位均清零。

3·2·16试编程:将片内RAM 50H、51H单元两个无符号数中较小的数存于60H单元。 3·2·17 试编程:将片内RAM 60H~69H单元中的l0个数相加,和的低8位存入7EH,高8位存入7FH。

3·2·18 试编程:统计从片内RAM 60H单元起所存60个数中\的个数,并存入工作寄 存器R7。

3·2·19试编程:将ROM中自2000H单元起的100个数,按序移至片外RAM自2080H单 元起的内存区间去。

3·2·20 试编程:将ROM中以TAB为初址的32个单元的内容依次传送到片外RAM以 00H为初址的区域去 (规定用查表指令)。

3·2·21试编写一段子程序,将片外RAM 20H单元中压缩的BCD码转换成共阴的七段笔划信息码,存于片内RAM 20H、21H单元,以待显示 (七段笔划信息码的最高位为0)。 3·2·22 请编一将A中内容乘10的程序,要求: (1)不可用MUL指令

1)乘积≤255 2)乘积﹥255 (2)可用MUL指令

1)乘积≤255 2) 乘积>255 规定乘积放在片内RAM的30H单元或30H、0lH单元。

3·2·23 教材例3·4是按总和仍为两位BCD码、无溢出进行编程的;如有溢出,请重编程序。

3·2·24 设教材例3·6程序中的多字节数为010000H,试剖析程序执行的经过与结果。 3·2·25 教材例3·7如不是两个数、而是n个数,请重编程序。(如有二数相等,不必建起标志位)。

3·2·26 CJNE指令执行何种操作?上述例3·7示出的程序为什么不用这一指令?如改用这一指令,程序将作何种改动?并请将重编后的汇编语言源程序译成机器码。 3·2·27设晶振为12MHz,请详细剖析 (包括计算)下列程序段的性质和用途: 0B0 79 63 DELAY:MOV Rl,#63H

0B2 00 DLl: NOP 0B3 00 NOP

0B4 D9 FC DJNZ Rl,DLl 0B6 22 RET

3·2·28请编写一个能延时1.5ms的子程序,要列出计算。Tcy=1us。

3·2·29请编写两段子程序,分别用指令延时法和定时器定时l0ms,设晶振为12MHz。 3·2·30设晶振为12MHz,请编写二段子程序,分别用指令延时法和定时器实现30ms延时。

3·2·30设晶振为12MHz,请编写二段子程序,分别用指令延时法和定时器实现30ms延时。

3·2·31某单片机系统:fOSC=l2MHz,定/计0用于20ms定时,定/计 1用于100次计数,定/计0和定/计1均要求重复工作。问: (1)外部计数脉冲应从何引脚输入? (2)试编能达到上述要求的程序。

3·2·32请回答:教材例3·19为什么按\、TL0、TH0\的次序读, 却不按\、TH0、TL0\的次序读。 3·2·33阅读下列程序, (1)说明该程序的功能。 (2)填出所缺的机器码。

(3)试修改程序,使片内RAM的内容达到右下图所示的结果。 7A__ MOV R2,#0AH __ __ MOV R0,#50H E4 CLR A

E6 LOOP: MOV @R0,A 08 INC R0

DA__ DJNZ R2,LOOP

DONE:

3·2·34 阅读下列程序,并要求: (1)说明程序的功能。

(2)写出涉及的寄存器及片内RAM单元的最后结果。 MOV R0,#40H MOV A,@R0 INC R0 ADD A,@R0 INC R0 MOV @R0,A CLR A ADDC A,#0 INC R0

MOV @R0,A

3·2·35 同上题要求,程序如下 MOV A,61H MOV B,#02H