这个程序以前是8031+外部存储器的机器,老机器,外国人的,我们学习中。
里边有8155,8255等等,程序有5000行汇编,汇编是反汇编来的,15k程序,RAM基本都用完,没有解释,
请问读懂这个程序是否困难,去交给电子市场的话我要求能提供详细解释(详细到我能修改里边的参数),大概的报价是多少?
如果我们自己读这个程序(我们没有很丰富的汇编经验,有丰富的C,外设控制,多种MCU经验),是否可行,大概多久能看出门道?
请大家评估下给个参考意见。谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
8051好象只有130多个指令
如果加上不同的寻址方式模式,如MOV在指令表里只算一个指令,但是MOV A,#00和 MOV A,@R0和MOV A,@DPTR在模拟时
要当作三个指令,所以才有我说的几百个指令
-----------------------------------------------------------------------
好像连把 MOV A,#00和 MOV A,@R0和MOV A,@DPTR 这些算三条指令 才能称得上100多条
如果这样的话,要实现指令仿真的难度就更低了
以下转贴 http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1705786&bbs_page_no=1&search_mode=1&search_text=51指令&bbs_id=1006
数据传送类指令
MOV A,Rn 寄存器送累加器
MOV A,direct 直接字节送累加器
MOV A,@Ri 间接RAM送累加器
MOV A,#data 立即数送累加器
MOV Rn,A 累加器送寄存器
MOV Rn,direct 直接字节送寄存器
MOV Rn,#data 立即数送寄存器
MOV direct,A 累加器送直接字节
MOV direct,Rn 寄存器送直接字节
MOV direct2,direct1 直接字节送直接字节
MOV direct,@Ri 间接RAM送直接字节
MOV direct,#data 立即数送直接字节
MOV @Ri,A 累加器送间接RAM
MOV @Ri,direct 直接字节送间接RAM
MOV @Ri,#data 立即数送间接RAM
MOV DPTR,# data16 16位立即数送数据指针
MOVC A,@A+DPTR 以DPTR为变址寻址的程序存储器读操作
MOVC A,@A+PC 以PC为变址寻址的程序存储器读操作
MOVX A,@Ri 外部RAM(8位地址)读操作
MOVX A,@ DPTR 外部RAM(16位地址)读操作
MOVX @Ri,A 外部RAM(8位地址)写操作
MOVX @ DPTR,A 外部RAM(16位地址)写操作
PUSH direct 直接字节进栈
POP direct 直接字节出栈
XCH A,Rn 交换累加器和寄存器
XCH A,direct 交换累加器和直接字节
XCH A,@Ri 交换累加器和间接RAM
XCHD A,@Ri 交换累加器和间接RAM的低4位
算术运算指令
ADD A,Rn 寄存器加到累加器
ADD A,direct 直接字节加到累加器
ADD A,@Ri 间接RAM加到累加器
ADD A,#data 立即数加到累加器
ADDC A,Rn 寄存器带进位加到累加器
ADDC A,direct 直接字节带进位加到累加器
ADDC A,@Ri 间接RAM带进位加到累加器
ADDC A,#data 立即数带进位加到累加器
SUBB A,Rn 累加器带寄存器
SUBB A,direct 累加器带借位减去直接字节
SUBB A,@Ri 累加器带借位减去间接RAM
SUBB A,#data 累加器带借位减去立即数
INC A 累加器加1
INC Rn 寄存器加1
INC direct 直接字节加1
INC @Ri 间接RAM加1
DEC A 累加器减1
DEC Rn 寄存器减1
DEC direct 直接字节减1
DEC @Ri 间接RAM减1
INC DPTR 数据指针加1
MUL AB A乘以B
DIV AB A除以B
DA A 十进制调整
逻辑运算
ANL A,Rn 寄存器“与”累加器
ANL A,direct 直接字节“与”累加器
ANL A,@Ri 间接RAM“与”累加器
ANL A,#data 立即数“与”累加器
ANL direct,A 累加器“与” 直接字节
ANL direct,#data 立即数“与” 直接字节
ORL A,Rn 寄存器“或”累加器
ORL A,direct 直接字节“或”累加器
ORL A,@Ri 间接RAM“或”累加器
ORL A,#data 立即数“或”累加器
ORL direct,A 累加器“或” 直接字节
ORL direct,#data 立即数“或” 直接字节
XRL A,Rn 寄存器“异或”累加器
XRL A,direct 直接字节“异或”累加器
XRL A,@Ri 间接RAM“异或”累加器
XRL A,#data 立即数“异或”累加器
XRL direct,A 累加器“异或” 直接字节
XRL direct,#data 立即数“异或” 直接字节
CLR A 累加器清零
CPL A 累加器取反
移位操作
RL A 循环左移
RLC A 带进位循环左移
RR A 循环右移
RRC A 带进位循环右移
SWAP A 半字节交换
位操作指令
MOV C,bit 直接位送进位位
MOV bit,C 进位位送直接位
CLR C 进位位清零
CLR bit 直接位清零
SETB C 进位位置1
SETB bit 直接位置1
CPL C 进位位取反
CPL bit 直接位取反
ANL C,bit 直接位“与”进位位
ANL C,/bit 直接位取反“与”进位位
ORL C,bit 直接位“与”进位位
ORL C,/bit 直接位取反“与”进位位
控制转移指令
ACALL addr11 绝对子程序调用
LCALL addr16 长子程序调用
RET 子程序返回
RETI 中断返回
AJMP addr11 绝对转移
LJMP addr16 长转移
SJMP rel 短转移
JMP @A+DPTR 间接转移
JZ rel 累加器为零转移
JNZ rel 累加器不为零转移
CJNE A,direct,rel 直接字节与累加器比较,不相等则转移
CJNE A,#data,rel 立即数与累加器比较,不相等则转移
CJNE Rn,#data,rel 立即数与寄存器比较,不相等则转移
CJNE @Rn,#data,rel 立即数与间接RAM比较,不相等则转移
DJNZ Rn,rel 寄存器减1不为零转移
DJNZ direct,rel 直接字节减1不为零转移
NOP 空操作
JC rel 进位位为1转移
JNC rel 进位位为0转移
JB bit,rel 直接位为1转移
JNB bit,rel 直接位为0转移
JBC rel 直接位为1转移并清零该位
####
为了不挡人X路,恕自删
####
简易仿真器软件的作法:
####
理由同上,楼主若没看到,可以留下邮箱,发过去给你
####
你大概不知道,51还可以在RAM里运行程序吧?他RAM和ROM的地址可以连在一起的.
你要解决的,不是几个指令,你要解决的是一个系统到另一个系统,并且两个系统还要等效.
一周热门 更多>