1.寄存器
指令包含指令的操作码和操作数
每条指令可能包含多个字节 每个字节保存在每一个内存地址中
指令中的立即数在立即寻址方式指令后的数为立即数,紧跟在操作码之后
汇编语言规定立即数不能作为指令的第一操作数
指令和数据要分开存放
- 存放指令区域叫代码区
- 存放数据区域叫数据区
1.intel 8086 处理器是intel公司第一款16位处理器(1978)
因其最为成功,所以要考虑兼容性问题,需掌握8086汇编技术
8086的通用寄存器
8086 内部有8个16位的通用寄存器,被命名为:AX,BX,CX,DX,SI,DI,BP,SP
前四个寄存器 AX,BX,CX,DX 又可以各自分成两个8为寄存器来使用,AH,AL,BH,BL,CH,CL,DH,DL
当一个16位寄存器分成两个8位寄存器来用时,对其中一个8位寄存器的操作不会影响到另一个8位寄存器
2.程序的重定位
指令和数据都应存放在连续的内存地址中,称其为 代码段数据段
因访问地址都采用绝对物理地址可能加载程序时出错,所以采用相对地址和逻辑地址防止程序重定向
3.内存分段机制
8086采用内存分段机制解决程序访问重定向问题
相对于开始地址的段内的偏移地址即数据的逻辑地址
其形式位“段地址:偏移地址”
为支持这种内存访问模式,处理器要至少提供两个段寄存器,分别为代码段CS寄存器和数据段DS寄存器
处理器将用DS的值和指令中提供的偏移地址相加,来形成访问内存所需的物理地址。
4.8086的内存分段机制
在进行数据传送和算术逻辑运算时,将AX的内容和CX的内容相加结果仍在AX中,在结果返回AX之前,需通过一个叫数据暂存器的寄存器中转。
处理器能够自动运行,这是控制器的功劳。为了加快指令执行速度,8086内部有一个6字节的指令预取队列,在处理器忙着执行那些不需要访问内存的指令时,指令预取部件可以趁机访问内存预取指令。这时,多达6个字节的指令流可以排队等待解码和执行。
8086内部有四个段寄存器。
- CS 代码段寄存器
- DS 数据段寄存器
- ES 附加段寄存器()
- SS 栈段寄存器
- IP 指令指针寄存器(和CS一起使用,CS指向代码段的起始地址,IP指向段内偏移,共同形成逻辑地址,并由总线接口部件变换成物理地址来取得指令)
8086的段寄存器和IP寄存器都是16位的。8086提供20位的物理地址。
16位的物理地址只能访问64KB的内存 地址范围位 0000H~FFFFH,共65536个字节。
8086 处理器在形成物理地址时,先将段寄存器的内容左移4 位(相当
于乘以十六进制的10,或者十进制的16),形成20 位的段地址,然后再同16 位的偏移地址相
加,得到20 位的物理地址。比如,对于逻辑地址F000H:052DH,处理器在形成物理地址时,
将段地址F000H 左移4 位,变成F0000H
段寄存器是16位的,在段不重叠的情况下,最多将1MB内存分成65536个段从0000H到FFFFH。
又因段不重叠情况下,每个段的最大长度是64KB,因为偏移地址是16位的,所以1MB的内存最多化分为 16 个段。
其实地址的选取都应为16的整数,成为16字节对齐。
2.汇编语言简介
(1).指令
传送指令 MOV
- 需要两个操作数即 目的操作数和源操作数 用逗号隔开
MOV AX,3FH
将立即数3FH 传送到寄存器AX中,通常十六进制数后不加H,前缀加“0x”
相加指令 add
- 把一个数和另一个数相加
ADD BX,AX
把BX寄存器的内容和AX寄存器的内容相加,结果存放在BX中,AX的内容并不改变
编译
汇编语言转换成机器指令
字处理软件生成的汇编语言源程序文件,编译软件任务是读取这些软件,将那些符号转变成二进制形式的机器指令代码。闭关吧机器代码存放到另一个文件中,二进制文件或可执行文件。当需要处理器执行时,再加载到内存里。
硬盘和显卡访问和控制
用户程序的结构
分段,段的汇编地址和段内汇编地址
一个规范的程序,应包括代码段,数据段,附加段和堆栈段。
段的化分和段与段之间的界限在程序加载到内存之前就已经准备好了。
定义段的汇编指令
SECTION 段名称
SEGMENT 段名称
每个段要求给出名字,即段名称,用来引用一个段。可以为任意名字,只要不重复和混淆。
网友评论