51 单片机教程:单片机寻址方式与指令系统
时间:2012-06-11 15:14:44 来源: 作者:
通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片
机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将
要系统地学习 8051 单片机的指令部份。
一、概述
1、指令的格式
我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,
只能懂得数字,如前面我们写进机器的 75H,90H,00H 等等,所以指令的第一种格式就
是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有
另一种格式,助记符格式,如 MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系
呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。
2、汇编
我们写指令使用汇编格式,而计算机和单片机只懂机器码格式,所以要将我们写的汇
编格式的指令转换为机器码格式,这种转换有两种办法:手工汇编和机器汇编。手工汇编
实际上就是查表,因为这两种格式纯粹是格式不一样,所以是一一对应的,查一张表格就
行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,
这就是机器汇编。
二、单片机的寻址
让我们先来复习一下我们学过的一些指令:MOV P1,#0FFH,MOV R7,#0FFH 这些
指令都是将一些数据送到对应的位置中去,为什么要送数据呢?第一个因为送入的数能让
灯全灭掉,第二个是为了要实现延时,从这里我们能看出来,在用单片机的编程语言编程
时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有 28
条指令(单片机共 111 条指令)。下面我们就从数据传递类指令开始吧。
分析一下 MOV P1,#0FFH 这条指令,我们不难得出结论,第一个词 MOV 是命令动
词,也就是决定做什么事情的,MOV 是 MOVE 少写了一个 E,所以就是“传递”,这就是指
令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“源”也就是
你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那
条单片机指令中,要送的数(源)就是 0FFH,而要送达的地方(目的地)就是 P1 这个寄
存器。在数据传递类指令中,均将目的地写在指令的后面,而将源写在最后。
这条指令中,送给 P1 是这个数本身,换言之,做完这条指令后,我们能明确地知道,
P1 中的值是 0FFH,但是并不是任何时候都能直接给出数本身的。例如,在我们前面给出
的单片机延时程序例是这样写的:
MAIN: SETB P1.0 ;(1)
LCALL DELAY ;(2)
CLR P1.0 ;(3)
LCALL DELAY ;(4)
AJMP MAIN ;(5)
;以下子程序
DELAY: MOV R7,#250 ;(6)
D1: MOV R6,#250 ;(7)
D2: DJNZ R6,D2 ;(8)
DJNZ R7,D1 ;(9)