首先,按你的的这个表看, 很多东西应该是批量处理的, 完全就应该用的间接地址,而不应该用直接地址.
其次,看你发的这个东西类似注释,那么换句话说这些地址你都没有定义, 你完全是在编写程序时,直接输入的地址,而不是地址代号. 那么, 可以这么说,任何编译器对你的意义都不大,
为什么这么说呢, 编译器的作用主要是对很多代号的处理上, 比如 LJMP MAIN 就会挑砖到 MAIN: 这个标志的地方。这是编译器的用途,当然,你可以不使用编译器的这个功能, 而直接使用, LJMP 0100H 来跳到主程序的地址。甚至你只要稍微花点时间计一下255个指令, 你可以抛弃编译器, 直接用16进制编辑器(WinHEX) 这类的,直接用 02 01 00 这样的方式来写 LJMP 0100H , 所以,就算有国产的编译软件,前提也是要按编译软件的要求养成习惯进行才行, 就好像 大多数人,把P0端口所有 IO拉低 都会用 MOV P0,#00H 而不会用 MOV 80,#00H 。 为什么呢? 因为考虑到将来的升级或者变更,假定下一个单片机 P0 不是 80了怎么办?
假定,如你所愿编译器可以 用 MOV xxxx, #00H 对某个间接地址直接写,其实编译器做的就是 后台, MOV R0,#xxxx MOV @R0,#00H 这两个操作, 但是,前提,这个 xxxx 肯定是一个代号,而不是一个地址。 那么编译器才可能 “ 相对智能的” 根据你命名这个代号的时候 是 IDATA 还是 DATA 来区分,而你光用地址的话,如何区分??
|