机器语言是机器指令的集合
机器指令是一台机器可以正确执行的命令,由一串二进制数表示。
汇编语言的主题是汇编指令 ,汇编指令是机器指令的助记符。
寄存器:cpu中可以存储数据的器件。一个cpu中有多个寄存器。
数据和指令都是二进制信息。
存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号,每个存储单元内容为一字节。
地址总线的宽度,决定了可寻址存储单元大小;N根地址总线(宽度为N),对应的寻址空间为2**N。
数据总线的宽度决定了cpu和外界的数据传送速度。
控制总线是一些不同控制线的集合,控制总线的宽度决定了cpu对外部器件的控制能力。
RAM(随机存储器):能读能写,断电后信息丢失。包括主板上的RAM,扩展槽上的RAM(例显卡)
ROM(只读存储器):只能读,断电后信息不丢失,包含一些系统启动所运行的一些程序。包括系统BIOS,接口卡上的BIOS。
CPU的组成:1.运算器进行信息处理 2.寄存器进行信息存储 3.控制器协调各种器件进行工作
寄存器: 1.通用寄存器:AX,BX,CX,DX 2.变址寄存器 : SI,DI
3.指针寄存器 : SP,BP 4.指令指针寄存器 : IP
5.段寄存器 : CS,SS,DS,ES 6. 标志寄存器 : PSW
通用寄存器均可以分为两个独立的8位寄存器。例如:AX可以分为AH(高位)和AL(低位)
1个字=2个字节=16位
mov ax,18 将18 送入AX AX=18
add ax,bx 将寄存器AX中的数值加上BX并存入BX ax=ax+bx
所有的内存单元构成的存储空间是一个一维的线性空间,每个内存单元都有一个唯一的地址,物理地址
地址加法器合成物理地址的方法:物理地址(20位)=段地址*16+偏移地址 (16进制的段地址相当于左移一位) 表示方法: 段地址:偏移地址
物理地址唯一时,段地址和偏移地址不唯一。
段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数。
偏移地址为16位,16位地址的寻址能力为64k,所以一个段的长度最大为16k。
CS-代码段寄存器 DS-数据段寄存器 SS-栈段寄存器 ES-附加段寄存器
Debug :
1.用R命令查看、改变CPU寄存器的内容
2.用D命令查看内存中的内容
3.用E命令改变内存中的内容
4.用U命令将内存中的机器指令翻译为汇编指令
5.用A命令以汇编指令的格式在内存中写入机器指令
6.用T命令单条执行机器指令
7.用Q命令退出Debug
CS:IP CPU将内存中CS:IP指向的内容当作指令执行
改变CS,IP的值 :
1.Debug中的R命令(r cs,ip),Debug是调试手段,并非程序方式
2.不能用指令修改,8086不提供对CS、IP的修改
3.jmp指令
(1) 同时修改CS、IP的内容 , jmp 2AE2 :2
(2)仅修改IP的内容 ,jmp ax (类似于 mov IP,ax)
字单元:有两个地址连续的内存单元组成,存放一个字型数据(16位)。低位字节存在低地址单元,高位字节存在高地址单元。
DS和[address]实现字的传送 :段地址可以放入DS中,但应首先将段地址存入通用寄存器中再转入DS中,不可以直接向DS中存入段地址,在之后的指令中例如 mov ax [0],[0]指段地址为DS中内容,偏移地址为0的内存单元,并将其存入ax中;mov [0],ax 即是将ax 中的内容存入段地址为DS内容,偏移地址为0的内存单元中。ax存入一个字(两个字节)的内容,而ah(高八位)、al(低八位)存入一个字节的
mov指令操作数据
推测出以下成立:
mov 寄存器,段寄存器
mov 内存单元,段寄存器
mov 段寄存器,内存单元
加法add和减法sub
注意:1.段寄存器和寄存器不可以直接相加
2.两个内存单元不可以直接相机
栈结构
栈是一种只能在一端进行插入或删除操作的数据结构。
栈有两个操作:1.入栈:将一个新的元素放到栈顶 2.出栈:从栈顶取出一个元素
push ax:将ax中的数据送入栈中 pop ax :从栈顶取出数据送入ax (以字为单位对栈进行操作)
栈段寄存器SS :存放栈顶的段地址 栈顶指针寄存器SP:存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素
注意内存空间的大小以及存入数据的大小,防止栈顶超界 (push,pop都有可以超界)