什么是汇编语言?逆向分析必备语言
发布时间:2023-06-29 10:04:39 作者:黑猫编程 浏览量:670
每一种微处理器,由于硬件设计和内部结构不同,需要用不同的电平脉冲来驱动,因此每一种微处理器都有自己的机器指令集,也就是机器语言。
早期程序设计均使用机器语言。程序员用0、1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带或卡片输入计算机,进行运算。
编译器:能够将汇编指令转换成机器指令的翻译程序。
指令和数据在存储器中存放,然而在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。
1000100111011000 → 89DB 数据
1000100111011000 → mov ax,bx 指令
存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号。例如:一个存储器有128个存储单元,从0~127开始编号。
总线:CPU和其他芯片连接的导线,叫做总线。物理上,总线是一根根导线的集合;根据传送信息不同,逻辑上分为地址总线、数据总线、控制总线。
主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。
CPU不能之间控制外部设备,这些外部设备都通过插在扩展插槽上的接口卡直接控制,而接口卡也通过总线和CPU相连,CPU就可以控制外部设备。
逻辑存储器情况:
8086CPU内存地址空间分配情况
在学习16位汇编时,可以对内存单元进行长度修饰,比如:mov byte ptr [1000H], 1,表示1是一个字节类型数据,mov word ptr [1000H], 1,表示1是一个字类型数据。
在C++中,使用变量类型表示数据的大小,引用头文件Windows.h
字节 BYTE 1字节 0-0xFF (unsigned char)
字 WORD 2字节 0-0xFFFF (unsigned short )
双字 DWORD 4字节 0-0xFFFFFFFF (unsigned long)
只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。从8086的内部结构来看,如果讲地址从内部简单的发出,那么只能送出16位地址,寻址能力只有64KB。
物理地址=段地址*16+偏移地址
在8086CPU中,任意时刻,设CS中的内容为M,IP中内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令。
在8086CPU加电启动或复位后(即CPU刚开始工作时),CS被设置为FFFFH,IP被设置为0000H。CPU从FFFF0H内存单元中读取指令并执行,时开机后的第一条指令。
如图所示:CPU初始状态CS=2000H,IP=0000H
将al中的数据送入内存单元10000H中
mov bx,1000H
mov ds,bx
mov [0],al
sub 操作数A,操作数B
影响ZF标志位
8086 CPU 标志寄存器有16位,其中存储的信息通常被称为程序状态字PSW(Program State Word)。
flag的第6位是ZF,零标志位,记录相关指令执行后,其结果是否为0。如果结果为0,ZR( Zero ),ZF=1,如果结果不为0,NZ( Not Zero ),ZF=0。
全称为程序数据库文件。我们使用它(更确切的说是看到它被应用)大多数场景是调试应用程序。目前我们对.PDB文件的普遍认知是它存储了被编译文件的调试信息,作为符号文件存在。
flag第2位是PF(Parity Flag),判断结果所有bit位中1的个数如果是偶数,PE(Parity Even),PF=1,如果是奇数PO(Parity Odd),PF=0。
flag第7位是SF(Sign Flag),结果为负NG,SF=1,结果为正PL,SF=0。
push ax执行,由下列两步完成
1.SP=SP-2
2.将ax中数据送入新的SS:SP指向位置
flag的第0位是CF,在进行无符号运算的时候,记录运算结果的最高有效位向更高位的进位值,或者从更高位的借位值。
记录有符号数是否溢出。
指令格式:cmp 操作对象1,操作对象2
指令功能:计算操作对象1-操作对象2,但并不保存结果,
下列为根据无符号数的比较结果进行转移的条件转移指令:
收藏