码迷,mamicode.com
首页 > 其他好文 > 详细

汇编总结2

时间:2018-11-10 00:08:50      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:实现   call   数据   原因   执行   对象   常用   汇编   其他   

一、寄存器

一个典型的cpu是由运算器,控制器,寄存器等器件组成的。

内部总线实现CPU内部各个器件之间的联系

外部总线实现cpu和主板上其他器件的联系

AX,BX,CX,DX通用寄存器

SI,DI,BP,SP基址和变址寄存器

CS,SS,DS,ES段寄存器

IP,FLAGS指令指针和标志寄存器

通用寄存器

8086cpu中,寄存器AX,BX,CX,DX通常用于存放一般性数据,称为通用寄存器,每个寄存器都是16位

为了和早期CPU兼容每一个寄存器都拆成了两个寄存器单独使用

AX分为AH和AL

字在寄存器中的存放

一个字由两个字节组成可以存在一个16位寄存器

字的高八位:存放于通用寄存器的高八位寄存器

字的低八位:存放于通用寄存器的低八位寄存器

MOV AX,20000  ; (AX)=4E20H

                             (AH)=4EH

                             (AL)=20H

 

汇编指令

mov ax,18   将18送入寄存器AX   AX=18

add ax,8 将寄存器AX中的数值加上8  AX=AX+8

mov ax,bx 将寄存器bx中的数据送入寄存器ax  AX=BX

add ax,bx 将AX和BX中的数值相加,结果存放在AX中 AX=AX+BX

mov ax,bl 是错误的指令原因是指令的两个操作对象位数不一样

物理地址

cpu访问内存单元时要给出内存单元的地址

所有的内存单元构成的存储空间是一个一维的线性空间。每一个内存单元在这个空间中都有唯一的地址,这个唯一的的地址称为物理地址。

8086的内部用两个16位地址通过计算合成得到一个20位的物理地址。

如:1230H*16+00C8H=123C8H

  段地址*16+偏移地址=物理地址

123CH*16+0008H=123C8H

理解成段的起始物理地址是:123C0H

段地址:偏移地址 1230:00C8或123C:0008

可以根据需要,将地址连续、起始物理地址为16倍数的一组内存单元当做一个段使用

CS和IP

CS:代码段寄存器,用于存放代码段的[段地址]

IP:指令指针寄存器,用于存放cpu将要读取的指令在代码段中的偏移地址

CS:IP对应的物理地址存放的cpu将要读取的指令

CS*16+IP是指令的物理地址

计算机工作的步骤

cpu基于CS:IP,计算出物理地址,然后得到相应的内存单元读取指令,送到指令缓冲区

cpu自动修改IP的值,IP=IP+所读取指令的长度,从而为下一条指令读取做准备

执行指令 转到第一步

IP和CS值的修改不能通过mov指令实现,需要借助转移指令(jmp,call)

同时修改CS IP的内容:jmp 段地址:偏移地址

比如jmp 2AE3:3 ;CS<-2AE3H

                             IP<-3H

只修改IP内容:jmp 某一合法寄存器

比如jmp AX ;IP<-AX

 

汇编总结2

标签:实现   call   数据   原因   执行   对象   常用   汇编   其他   

原文地址:https://www.cnblogs.com/yxy98/p/9935102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!