SP 初始化 07H ,向上生长,空栈,也就是先送数据再移动 SP,可以设置在 00~7FH
89S52 的ROM 范围是 00H ~ 1FFFH 共 8K
SRAM 的分布
0~1F R0~R7*4BANK
20H ~ 2FH BIT ADDRESSING
30H ~ 7FH SRAM
P0 ~ P3 口,送 1 或者 0 是输出状态。送1的时候端口是高阻态可以读取数据。
EA 引脚决定使用内部还是外部ROM,一般是拉到VDD表示使用内部ROM
PSEN 外部存储器使能
ALE 锁存器使能
汇编指令的翻译
写汇编代码的时候编译器对这些代码进行翻译。
假设我们两条简单的指令JMP指令,看看到底怎么翻译的:
CSEGAT00H
LJMP 1204H
AJMP 101H
END
LOC OBJ LINE SOURCE
----1 CSEG AT 00H
0000 021204 2 LJMP 1204H
0003 2101 3 AJMP 101H
4 END
首先看 LJMP 的二进制码 00000010 A15-A8 A7-A0 其中 0X02是指令码,剩下的 16BIT 是地址。
可以看出 LJMP 需要3个字节来保存所有信息。LJMP 1204H 的地址是 1204H,那么这条指令很自然
的翻译为 021204 查看 LIST 文件可以确认这点。
再看 AJMP 指令 AJMP 101H
二进制码是 A10 A9 A8 00001 A7 A6 A5 A4 A3 A2 A1 A0 同样是换汤不换药,指令码是 00001
剩下的是地址 101H 了其中高三位是 001 ,低8位是 0000-0001 所以指令的合成
001(高三位)+00001(指令码)+0000-0001(低8位)于是得到 2101 了,可以看出这里只需要 2字节。
其他代码都是这样出来的。
寻址方式带来的指令差异。所谓的寻址,就是寻找地址,简单点说,就是从什么地方能找到数据
04 1INCA 可以访问 ACC
05 2INCdirect 可以直接访问SRAM为之直接寻址
06 1INC@R0 可以通过 R0 R1 简介访问SRAM,为之间接寻址
07 1INC@R1
08 1INCR0 可以访问 R0~R7 为之寄存器寻址
09 1INCR1
0A 1INCR2
0B 1INCR3
0C 1INCR4
0D 1INCR5
0E 1INCR6
0F 1INCR7
可以看出,虽然名字有点怪,但是道理确是很简单。