1. 机器语言与汇编语言

1.1 机器语言简介
对于计算机来说,能识别的只有0,1两个数字。最早的时候,程序员就是用0,1这2个符号来进行编码,不如远古时期的纸带卡片,使用打孔来代表1,不打孔代表0,然后通过纸带机或卡片机来识别运行这种0,1程序。

这种程序方便计算机运行,但是却是不容易让程序员进行编写的。

1.2 汇编语言简介

人们通过编写汇编指令,然后使用汇编编译器编译成机器语言。汇编语言比机器语言更容易阅读识别

比如

操作:寄存器BX的内容送到AX中

1000100111011000              // 机器指令
mov ax,bx                    // 汇编指令

2. 指令执行

2.1 指令寻址

cs寄存器,ip寄存器

每次从 [cs,ip] 取一条指令执行,执行后ip值增加,指向下一条指令

CPU执行时,会一直的从内存单元中读取指令,坊到指令缓冲器执行。而取指令时,是根据CS寄存器和IP寄存器来获取一个地址
[CS:IP]。这个地址指向内存单元中的代码段。CPU从中读取一条指令执行,然后IP指向下一条指令,继续读取执行。如此循环。
[CS+IP]:CS=段地址,IP=偏移地址。CPU一直从[CS+IP]指向的内存单元处读取指令。

2.2 访问数据
当CPU需要获取一个数据时,这时候代码段中能够获得的是DS寄存器和一个偏移地址。
[DS*0x10 + 偏移地址],指定地址时候可以不显示的写出DS。
这个地址指向内存单元中的数据。CPU根据这个地址获取到需要的数据。
基本地址:DS存储的是基本地址,但是在程序中段寄存器DS一般可以不显示说明。只用 [偏移地址] 来表示内存单元的地址。
偏移地址:是一个常数,可以直接使用数字来表示,比如:[553]。也可以使用BX,BP,SI,DI(其他的寄存器不能表示内存地址)中的值来表示。比如[BX]
[DS+BX]:DS=段地址,BX=偏移地址,内存单元地址为DS*0x10+BX。计算其寻址能力根据可指定的内存范围大概为0-1M之间。

2.3 指令跳转

当CPU执行完一块内存中的代码段时,使用JMP命令来修改CS寄存器和IP寄存器的值。从而控制计算机指令执行的跳转。

jmp:jmp指令转移就是修改cs,ip寄存器的指向。来完成跳转的功能。JMP导致[CS:IP]指向新的内存单元,CPU从新的内存单元读取指令。

 posted on 2018-12-26 22:27  猛练自然强  阅读(257)  评论(0编辑  收藏  举报