前言:
这几天一直都在复习复试的内容,304号测试的进展有些慢。今天刚开始分析了一下main函数。
汇编指令:
1.nop指令
空操作指令指令格式:NOP
说明: NOP是英语“No Operation”的缩写。NOP无操作数,所以称为“空操作”。
执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。实例:MOVLW 0xOF ;送OFH到W MOVWF PORT_B ;W内容写入B口 NOP ;空操作 MOVF PORT_B,W ;
读操作说明: 该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。
2.lea指令
lea, load effective address, 加载有效地址. 指令形式是从存储器读数据到寄存器, 效果是将存储器的有效地址写入到目的操作数, 简单说, 就是C语言中的”&”.
LEA指令的功能是取偏移地址,例如LEA AX,[1000H]
,作用是将源操作数度[1000H]的偏移地址1000H送至AX;
MOV指令的功能是问传送数据,例如MOV AX,[1000H]
,作用是将1000H作为偏移地址,寻址找到回内存单元,将该内存单元中的数答据送至AX。
main函数伪代码分析:
main函数汇编代码分析:
总结:
首先对栈进行初始化操作,然后判断a1==2? 不成立就进行print操作,输出file流文档,然后出栈。 成立的话会调用一个signal函数,查询了一下signal(a1,a2),a1为要进行处理的信号,这里为2;a2为处理方式,一般来说处理方式一般有三种: SIG_IGN 忽略该信号 SIG_DFL 恢复对信号的系统默认处理 sighandler_t 执行handler函数
在此处就需要执行handler函数,使用handler处理信号量2. 令rdi=rbx+8,调用sub_CE0,然后进入循环。
今天分析了main函数具体过程,之后继续分析其他函数。