304号测试--main函数分析

Posted by SGQ on April 5, 2020

前言:

这几天一直都在复习复试的内容,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函数伪代码分析:

enter description here


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函数具体过程,之后继续分析其他函数。


参考链接:

Nop指令的作用

lea指令!