x86汇编_02





1、C语言细节记录


① 数据类型转换(一般短字节类型可以自动向长字节类型转换)

happysneaker.com

C语言中自动类型转换


C语言强制转换方法:(int)num


② a++ 先运算,后自增      ++a  先自增,后运算

happysneaker.com

happysneaker.com


③ 取153的三位数字

int x=153;

bw=x/100;  // 1

sw=(x%100)/10;  //5   (x%100)取余为53,53/10整除10得到5

gw=x%10;  // 3 取余得3


happysneaker.com








第一章


1、存储单元

① 汇编中的堆栈并非数据结构中的堆栈,这里指的是一块内存,操作系统在程序启动时已经分配好,供程序执行时使用。

② 如下关于计算机存储器的介绍 

happysneaker.com


③ 关于CPU与存储器的交互

happysneaker.com

注意有三类总线:地址、控制、数据


如下读取数据:

happysneaker.com


happysneaker.com 


2、地址总线:——注意寻址的单位为字节,并非位,是一个一个的存储单元,是Byte,不是bit

happysneaker.com


因此地址总线的宽度决定了最大寻址范围:

happysneaker.com


3、数据总线——也就是说,地址总线决定了寻址范围,数据总线决定了一次传输的最大数据长度。

happysneaker.com

注意8086CPU的数据总线宽度为16.


比如传输一个89D8H数据时,8088和8086CPU的传输情况分别为:

happysneaker.comhappysneaker.com


4、控制总线:

happysneaker.com


5、注意一个存储单元可以存储8个比特位,即一个字节。

happysneaker.com


练习:

happysneaker.com

happysneaker.com

第六题说明了数据总线每次传送数据的数据单位描述为宽度,即数据长度最多为多少个bit位或者多少字节。

结合第七题理解,8086宽度为16根数据总线,所以一次传送16位即2Byte,1024/2=512,懂了吧。

内存地址是要以2的几次方理解,但是传送数据得分成一部分一部分地传送。



6、内存地址空间的大小决定于CPU地址总线的宽度:

happysneaker.com


7、不同计算机系统的内存地址空间的分布式不同的:

happysneaker.com


也就是说计算机将所有物理上的存储器在逻辑上当做一个连续的存储器,对于不同种类的存储器划分不同的地址范围:

happysneaker.com




第二章——寄存器(简单介绍)


8086是小段存储:高位字节放在内存的高地址处,低位字节放在内存的低地址处。


1、一个典型的CPU分为三部分:寄存器、运算器、控制器


2、不同的CPU,寄存器的个数、结构不同,8086CPU有14个寄存器:

AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、DS、ES、SS、PSW


3、8086CPU所有寄存器都是16位的,可以存放两个字节:AX——DX叫做通用寄存器,使用存放一般性的数据。

happysneaker.com


4、8086CPU一次性可以处理如下两种尺寸的数据:

字节:8bit,

字:——word——一个字由两个字节组成,这两个字节分别存储在寄存器的高八位和第八位。

happysneaker.com


5、汇编指令——指令不区分大小写

happysneaker.com

happysneaker.com


6、16位机器的概念

happysneaker.com

8086CPU有20位地址总线,可以传送20位地址,寻址能力为1MB。

happysneaker.com

偏移地址的范围最大为2的16次方即 FFFFH。

happysneaker.com

happysneaker.com


练习题:

happysneaker.com

happysneaker.com

happysneaker.com

https://www.cnblogs.com/jack-zander/p/7502835.html


7、CS和IP

happysneaker.com

happysneaker.com

happysneaker.com

happysneaker.com


修改CS和IP中的内容:

happysneaker.com

happysneaker.com

happysneaker.com

happysneaker.com

同时赋值CS和IP:

happysneaker.com


8、代码段

happysneaker.com



实验:查看CPU和内存,用机器指令和汇编指令汇编








第三章——寄存器(内存访问)


从内存的角度理解寄存器。

1、小端存储

happysneaker.com


2、DS 和 [address]

CPU要读些一个内存单元时,必须先给出其地址,8086PC中,内存地址由段地址和偏移地址组成。

8086CUP中有一个DS寄存器,通常用来存放要访问的数据的段地址。

比如:

mov bx,1000H

mov ds,bx

mov al,[0]

就是将10000H(1000:0)中的数据读到al中。

happysneaker.com

happysneaker.com


happysneaker.com

happysneaker.com

happysneaker.com


※思考题

happysneaker.com



3、字的传送

        MOV指令在寄存器和内存之间进行字节型数据的传送。因为8086CPU是16位结构,有16根数据线,所以,可以一次性传送16位的数据,也就是说可以一次性传送一个字。只要在mov指令中给出16位的寄存器就可以进行16位数据的传送:

happysneaker.com


思考题:

happysneaker.com


思考题:

happysneaker.com

happysneaker.com


4、mov、add、sub指令

MOV指令的到现在有如下几种形式:

mov 寄存器,数据 —— MOV ax,8

mov 寄存器,寄存器——MOV ax,bx

mov 寄存器,内存单元——MOV ax,[0]

mov 内存单元,寄存器——MOV [0],ax

mov 段寄存器,寄存器——MOV ds,ax


add 和 sub 指令同MOV一样,都有两个操作对象,也可以有以下几种形式:

add 寄存器,数据——add ax,8

add 寄存器,寄存器——add ax,bx

add 寄存器,内存单元——add ax,[0]

add 内存单元,寄存器——add [0],ax


sub 寄存器,数据——sub ax,9

sub 寄存器,寄存器——sub ax,bx

sub 寄存器,内存单元——sub ax,[0]

sub 内存单元,寄存器——sub [0],ax


他们还可以对段寄存器进行操作。


5、数据段


编程时,可以根据需要,将一组内存单元定义为一个段。

因此可以将一组长度为N(N<=64KB)、地址连续、起始地址为16的倍数的内存单元当做专门存储数据的内存空间,从而定义了一个数据段。

比如:123B0H~123B9H 这段内存空间来存放数据。我们就可以认为这段内存是一个数据段,他的段地址为123BH,长度为10个字节。

happysneaker.com

happysneaker.com


思考题:

happysneaker.com

总结:

happysneaker.com


练习题:

happysneaker.com

happysneaker.com

























































Web安全技术分享
请先登录后发表评论
  • 最新评论
  • 总共0条评论