汇编Day0

本文介绍了汇编语言的基础知识,包括它与高级编程语言的区别,以及如何通过汇编指令操作寄存器。详细讲解了8086CPU的16位寄存器,如AX、BX等,并讨论了数据溢出问题。还阐述了CPU的寻址能力,特别是8086CPU的段地址和偏移地址合成物理地址的机制,以及段寄存器的作用。最后,提到了如何通过修改CS和IP寄存器来控制指令执行。
摘要由CSDN通过智能技术生成

汇编语言是Reverse中的必备知识,作为一名Reverse小白,从汇编开始。

参考王爽老师的 汇编语言。

本博客作为对教材中的重难点知识进行总结。

第1章 基础知识

首先解释一下什么是 汇编语言,首先是一种编程语言,只不过相对于python,C++等高级编程语言汇编语言更亲和于底层架构。即是直接在硬件之上工作的编程语言,首先要了解系统的架构,才能有效的应用汇编语言进行编程。

汇编语言的主体是汇编指令,于机器指令的差别在于表示方法上。例如汇编指令 mov ax,bx 通过编译器转换为机器码1000100111011000,表示把寄存器BX的内容送到AX中。

认识存储器,指令和数据,存储单元,以及一些存储单位。微型机的存储单元可以存储一个字节

bit,也就是一个二进制位,是电子计算机的最小信息单位。8bit=1Byte,即通常讲的一个字节。

1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB B为Byte

了解总线。

第2章 寄存器(cpu工作原理)

寄存器是CPU中我们可以用指令读写的部件,通过改变寄存器的内容来实现对CPU的控制.

8086CPU所有寄存器都是16位,即可以存放两个字节。AX,BX,CX,DX四个寄存器通常用来存放一般性的数据, 被称为通用寄存器。为了兼容,可分为两个独立的8位寄存器使用。如AX可分为AH和AL,即高8位和低8位。

举例汇编指令:

mov ax,18  将18送入寄存器AX中  mov ax,bx  将寄存器BX中的值送到AX中。

add ax,8   将寄存器AX中的值加上8    add ax,bx 将寄存器AX和BX的数值相加存入AX中

注意数据溢出问题。若AX中数据为00C5H,执行add al,93H 后 AX值不是0158H,而是0058H,因为al为8位寄存器,所以最高位1丢失,但不是真正的丢失(?)

8086CPU中有20位地址总线,达到1MB的寻址能力,而8086为16位CPU结构,在内部一次性处理,传输,暂时存储的地址只有16位,表现出的寻址能力只有64KB。因此8086CPU采用地址加法器用两个16位的地址来合成一个20位的地址。地址加法器采用物理地址=段地址*16+偏移地址来合成物理地址,本质含义为”基础地址+偏移地址=物理地址“的寻址模式的一种具体实现方案。

tips:段地址*16常说为左移4位,这个位为二进制位。一个X进制的数据左移1位,相当于乘以X.

内存并没有分段,段的划分来自于CPU。举例:可以认为地址10000H-100FFH的内存单元组成一个段,该段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H。注意这样的段地址不唯一,CPU可以用不同的段地址和偏移地址形成同一个物理地址。

段地址在8086CPU的段寄存器中存放,CS,DS,SS,ES为8086中的四个段寄存器。CS和IP是8086中最关键的两个寄存器,CS为代码段寄存器,IP为指令指针寄存器。任意时刻,CS中内容为M,IP中内容为N,8086CPU将从内存M*16+N个单元开始,读取一条指令并执行。读取一条指令后,IP中的值自动增加,以使CPU可以读取下一条指令。我们可以通过修改CS和IP来控制CPU执行目标指令,但是不能用mov指令修改,可以用jmp指令。jmp 段地址:偏移地址。

同时修改CS和IP,如jmp 2AE3:3,执行后,CS=2AE3H,IP=0003H 

只修改IP 则 jmp ax 执行前:ax=1000H CS=2000H,IP=0003H

                                执行后:  ax=1000H CS=2000H,IP=1000H  类似于 mov IP,ax 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值