8051指令集架构ISA51研究——基于TI CC系列 8051-MCU

08-10那会儿还在读大学的时候,迷恋于各种CPU架构不可自拔,MIPS、ARM7、ARM9、那会儿刚兴起的Cortex-M、8051、MSP430、以及Altera的Nios-II,研究了很多架构、指令集、cache、MPU之类的,那会儿对IP核的认识也刚建立,在OpenCores网站上下载了N多IP核的RTL代码。那是我做学习最开心的时候。

但是现在都没什么用到了


好在现在使用BLE、Zigbee,需要用到TI的CC系列MCU是基于8051架构的,因此又重新学习8051的指令集(虽然现在都是用C编程,基本不关心汇编指令的)


        NAME    main

        PUBLIC  main

        ORG     0FFFEh
        DC16    main

        RSEG    RCODE
main    
;;===========Arithmetic Operations
		ADD A, R0
		ADD A, R7;
		
		ADD A, 0x5A
		ADD A, 0xFF
		
		ADD A, @R0
		ADD A, @R1
		
		ADD A, #0x55
		ADD A, #0xAA
		
		ADDC A, R0
		ADDC A, R7
		
		ADDC A, 0x12
		ADDC A, 0x34
		
		ADDC A, @R0
		ADDC A, @R1
		
		ADDC A, #0x12
		ADDC A, #0xAB
		
		
		SUBB A, R0
		SUBB A, R7
		
		SUBB A, 0x12
		SUBB A, 0xEF
		
		SUBB A, @R0
		SUBB A, @R1
		
		SUBB A, #0x9A
		SUBB A, #0xCD
		
		INC A
		
		INC R0
		INC R7
		
		INC 0x12
		INC 0x34
		
		INC @R0
		INC @R1
		
		INC DPTR
		
		DEC A
		
		DEC R0
		DEC R7
		
		DEC 0x12
		DEC 0xAB
		
		DEC @R0
		DEC @R1
		
		MUL AB
		DIV AB
		DA A
;;=========== Logical Operations
		ANL A, R0
		ANL A, R7
		
		ANL A, 0x12
		ANL A, 0xEF
		
		ANL A, @R0
		ANL A, @R1
		
		ANL A, #0xF0
		ANL A, #0x80
		
		ANL 0x10, A
		ANL 0xFF, A
		
		ANL 0x12, #0xF0
		ANL 0x12, #0x80
		
		ORL A, R0
		ORL A, R7
		
		ORL A, 0x12
		ORL A, 0xEF
		
		ORL A, @R0
		ORL A, @R1
		
		ORL A, #0xF0
		ORL A, #0x80
		
		ORL 0x10, A
		ORL 0xFF, A
		
		ORL 0x12, #0xF0
		ORL 0x12, #0x80
		
		
        XRL A, R0
		XRL A, R7
		
		XRL A, 0x12
		XRL A, 0xEF
		
		XRL A, @R0
		XRL A, @R1
		
		XRL A, #0xF0
		XRL A, #0x80
		
		XRL 0x10, A
		XRL 0xFF, A
		
		XRL 0x12, #0xF0
		XRL 0x12, #0x80


		CLR A
		CPL A
		RL A
		RLC A
		RR A
		RRC A
		SWAP A
		
;;=========== Data Transfer
		MOV A, R0
		MOV A, R7
		
		MOV A, 0x12
		MOV A, 0x34
		
		MOV A, @R0
		MOV A, @R1
		
		MOV A, #0x12
		MOV A, #0x34
		
		MOV R0, A
		MOV R7, A
		
		MOV R0, 0x12
		MOV R7, 0xAB
		
		MOV R0, #0x11
		MOV R7, #0x23
		
		MOV 0x12, A
		MOV 0x34, A
		
		MOV 0x12, R0
		MOV 0x34, R7
		
		MOV 0x12, 0x34
		MOV 0x34, 0xAB
		
		MOV 0x12, @R0
		MOV 0x34, @R1
		
		MOV 0x12, #0x12
		MOV 0xAB, #0xCD
		
		MOV @R0, A
		MOV @R1, A
		
		MOV @R0, 0x12
		MOV @R1, 0x34
		
		MOV @R0, #0x12
		MOV @R1, #0x34
		
		MOV DPTR, #0x1234		
		MOVC A, @A+DPTR
		
		MOVX A, @R0
		MOVX A, @R1
		
		MOVX A, @DPTR
		
		MOVX @R0, A
		MOVX @R1, A
		
		MOVX @DPTR, A
		
		PUSH 0x12
		POP 0x34
		
		XCH A, R0
		XCH A, R7
		
		XCH A, 0x12
		XCH A, 0x34
		
		XCH A, @R0
		XCH A, @R1
		
		XCHD A, @R0
		XCHD A, @R1

;;=========== Program branching
		ACALL 0x12
		ACALL 0x34
		
		LCALL 0x1234
		LCALL 0x5678
		
		RET
		RETI
		
		AJMP 0x12
		AJMP 0x34
		
		LJMP 0x1234
		LJMP 0x5678
		
		SJMP -128
		SJMP 127
		
		JMP @A+DPTR
		
		JZ -127
		JNZ 128
		
		JC -127
		JNC 128
		
		JB 0x12, -127
		JNB 0x34, 128
		
		CJNE A, 0x12, -127
		
		CJNE A, #0x12, 0x80
		
		CJNE R0, #0x34, 0x88
		CJNE R7, #0x56, 0x99
		
		CJNE @R0, #0x12, 10
		CJNE @R1, #0x34, -10
		
		DJNZ R0, 10
		DJNZ R7, -10
		
		DJNZ 0x12, 0x10
		DJNZ 0x34, 0x20
		
		NOP
		NOP
;;=========== Boolean variable operations
		CLR C
		CLR 0x10
		
		SETB C
		SETB 0x12
		
		CPL C
		CPL 0x34
		
		ANL C,0x56
		ANL C, /0x78
		
		ORL C, 0x9A
		ORL C, /0xAB
		
		MOV C, 0xCD
		MOV 0xEF, C
		
        END     main


程序重点是对每一条指令的byte、cycle、PSW影响、寻址方式、动作行为进行探究,为了方便研究8051架构的指令集和汇编器、反汇编器、指令集仿真器的编写。


调试必须使用单步调试,并且在每一个指令之前应该设置对应的寄存器或内存。可以使用simulator进行仿真或者直接下载到MCU内部进行单步运行(出现异常情况造成损坏,程序员自行担责)。


指令集参考可以看网上的, 或者IAR或者Keil的文档。其中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值