标签:实现 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
标签:实现 call 数据 原因 执行 对象 常用 汇编 其他
原文地址:https://www.cnblogs.com/yxy98/p/9935102.html