机器语言
CPU中央处理单元每一种微处理器,由于硬件设计和内部结构不同,需要用不同的电平脉冲来驱动,因此每一种微处理器都有自己的机器指令集,也就是机器语言。
早期程序设计均使用机器语言。程序员用0、1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带或卡片输入计算机,进行运算。 汇编语言产生
汇编语言组成
存储器指令和数据在存储器中存放,然而在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。 1000100111011000 → 89DB 数据 1000100111011000 → mov ax,bx 指令 存储单元存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号。例如:一个存储器有128个存储单元,从0~127开始编号。 CPU对存储器的读写总线:CPU和其他芯片连接的导线,叫做总线。物理上,总线是一根根导线的集合;根据传送信息不同,逻辑上分为地址总线、数据总线、控制总线。 地址总线
数据总线控制总线
主板和接口卡主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。 CPU不能之间控制外部设备,这些外部设备都通过插在扩展插槽上的接口卡直接控制,而接口卡也通过总线和CPU相连,CPU就可以控制外部设备。 存储器芯片
内存地址空间逻辑存储器情况: 8086CPU内存地址空间分配情况 寄存器
通用寄存器mov 和 add 指令逆向分析
OD基本快捷键及功能定位到系统函数
数据类型在学习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次方。 mov ax,2 add ax,ax add ax,ax add ax,ax 086CPU偏移地址8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。从8086的内部结构来看,如果讲地址从内部简单的发出,那么只能送出16位地址,寻址能力只有64KB。 物理地址=段地址*16+偏移地址
段寄存器CS和IP在8086CPU中,任意时刻,设CS中的内容为M,IP中内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令。 在8086CPU加电启动或复位后(即CPU刚开始工作时),CS被设置为FFFFH,IP被设置为0000H。CPU从FFFF0H内存单元中读取指令并执行,时开机后的第一条指令。 修改CS和IP
如图所示:CPU初始状态CS=2000H,IP=0000H Debug调试常用指令
进入Debug实验任务1实验任务2实验任务3DS段地址将al中的数据送入内存单元10000H中 mov bx,1000H mov ds,bx mov [0],al SUB指令sub 操作数A,操作数B 影响ZF标志位 标志寄存器8086 CPU 标志寄存器有16位,其中存储的信息通常被称为程序状态字PSW(Program State Word)。
ZF标志位flag的第6位是ZF,零标志位,记录相关指令执行后,其结果是否为0。如果结果为0,ZR( Zero ),ZF=1,如果结果不为0,NZ( Not Zero ),ZF=0。 OD命令栏指令
PDB文件全称为程序数据库文件。我们使用它(更确切的说是看到它被应用)大多数场景是调试应用程序。目前我们对.PDB文件的普遍认知是它存储了被编译文件的调试信息,作为符号文件存在。 禁用VS优化MOVSX和MOVZX
LEA
PF标志位flag第2位是PF(Parity Flag),判断结果所有bit位中1的个数如果是偶数,PE(Parity Even),PF=1,如果是奇数PO(Parity Odd),PF=0。 SF标志位flag第7位是SF(Sign Flag),结果为负NG,SF=1,结果为正PL,SF=0。 栈操作指令
push ax执行,由下列两步完成 1.SP=SP-2 2.将ax中数据送入新的SS:SP指向位置 CF标志位flag的第0位是CF,在进行无符号运算的时候,记录运算结果的最高有效位向更高位的进位值,或者从更高位的借位值。 OF标志位记录有符号数是否溢出。 CMP指令指令格式:cmp 操作对象1,操作对象2 指令功能:计算操作对象1-操作对象2,但并不保存结果, 下列为根据无符号数的比较结果进行转移的条件转移指令: |
|
来自: 好汉勃士 > 《电子世界(编译及汇编语言)》