请弄过汇编的提个意见,关于读5000行汇编东东...

2020-01-20 19:09发布

这个程序以前是8031+外部存储器的机器,老机器,外国人的,我们学习中。
里边有8155,8255等等,程序有5000行汇编,汇编是反汇编来的,15k程序,RAM基本都用完,没有解释,
请问读懂这个程序是否困难,去交给电子市场的话我要求能提供详细解释(详细到我能修改里边的参数),大概的报价是多少?
如果我们自己读这个程序(我们没有很丰富的汇编经验,有丰富的C,外设控制,多种MCU经验),是否可行,大概多久能看出门道?
请大家评估下给个参考意见。谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
83条回答
wchuxin
1楼-- · 2020-01-26 22:06
回复【51楼】kl818bc000 我不是马甲
-----------------------------------------------------------------------

8051好象只有130多个指令
kl818bc000
2楼-- · 2020-01-27 02:40
 精彩回答 2  元偷偷看……
flkflk
3楼-- · 2020-01-27 07:21
回复【56楼】kl818bc000 我不是马甲
如果加上不同的寻址方式模式,如MOV在指令表里只算一个指令,但是MOV A,#00和 MOV A,@R0和MOV A,@DPTR在模拟时
要当作三个指令,所以才有我说的几百个指令
-----------------------------------------------------------------------

好像连把 MOV A,#00和 MOV A,@R0和MOV A,@DPTR 这些算三条指令 才能称得上100多条
kl818bc000
4楼-- · 2020-01-27 10:37
在论坛里搜了一下,的确是只有100多条,谢谢提醒,我本来是认为一个字节的OP-CODE顶多256条指令

如果这样的话,要实现指令仿真的难度就更低了


以下转贴 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转移并清零该位
kl818bc000
5楼-- · 2020-01-27 13:13
简易仿真器硬件的作法:

####

为了不挡人X路,恕自删

####

简易仿真器软件的作法:

####

  理由同上,楼主若没看到,可以留下邮箱,发过去给你

####
zhxzhx
6楼-- · 2020-01-27 16:41
【54楼】 kl818bc000 我不是马甲

   你大概不知道,51还可以在RAM里运行程序吧?他RAM和ROM的地址可以连在一起的.

  你要解决的,不是几个指令,你要解决的是一个系统到另一个系统,并且两个系统还要等效.

一周热门 更多>