汇编小甲鱼

基础知识

是直接在硬件上工作的编程语言。

汇编语言的组成

汇编指令

eg:mov ax,bx

伪指令

其它符号

cpu对存储器的读写

一般划分为,地址总线,数据总线和控制总线

地址总线

cpu通过地址总线来指定存储单元,地址总线传送多少不同的信息,cpu就可以对多少存储单元进行寻址。

一个cpu有N个地址总线,这个cpu的地址总线宽度为N,它最多可以寻找2^N个内存单元。

数据总线

进行数据传送

它的宽度决定了cpu与外界的数据传送速度。

控制总线

它是一些不同控制线的集合。

控制总线的宽度决定了cpu对外部器件的控制能力。

内存地址空间

一个cpu的地址线宽度为10,那就可以寻址1024个内存单元,这1024个内存单元就构成了cpu的内存地址空间。

主板

主板上有一些主要器件,均通过总线相连。

接口卡

cpu不能对外部设备直接控制,直接控制的是插在扩展槽上的接口卡。

存储器芯片

读写属性上分为

随机存储器(RAM)和只读存储器(ROM)

从功能和连接上分为

随机存储器RAM,装有BIOS的ROM,接口卡上的RAM

BIOS

基本输入输出系统,由主板和各类接口卡厂商提供的软件系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nuf5Ufq8-1665645686575)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904101309153.png)]

上述存储器在物理上为独立的器件,但是有两点相同

均和cpu的总线相连
cpu对它们进行读写时都通过控制线发出内存读写命令

可以将各类存储器看作一个逻辑存储器:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G087pG2m-1665645686576)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904101744761.png)]

寄存器(cpu工作原理)

cpu概述

一个典型的CPU由运算器,控制器,寄存器的器件组成,均靠内部总线相连。

寄存器概述

8086cpu有14个寄存器,分别为

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

通用寄存器

8086cpu所有的寄存器均为16位,可以存放两个字节。

AX BX CX DX通常用来存放一般性数据被称为通用寄存器。

eg:

数据:18

二进制表示:10010

在寄存器AX中的存储:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jhcaY56t-1665645686576)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904103201702.png)]

一个16位寄存器能存储的数据的最大值为2^16-1。

以AX为例
为了保证兼容性,它可以分为两个独立的8位寄存器:AH和AL

字在寄存器中的存储

一个字可以寄存在16位的寄存器中,分别分布于高八位和第八位。

部分汇编指令

#汇编指令不区分大小写
mov ax,18-----将8送入AX              AX=18
mov ah,78-----将78送入AH             AH=78
add  ax,8-----在寄存器ax数值加上8      AX=AX+8
mov ax,bx-----将BX中的数据送入AX       AX=BX
add ax,bx-----将AX,BX中的内容相加     AX=AX+BX

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6TO43eUs-1665645686577)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904104902884.png)]

?=1044CH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wVFybUc-1665645686577)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904105213303.png)]

?=0058H

物理地址

所有的内存单元构成的储存空间是一个一维的线性空间。称为物理地址。

16位结构的cpu

#特征
运算器一次最多可以处理16位的数据。
寄存器的最大宽度为16位。
寄存器和运算器之间的通路是16位。

8086有20位地址总线,可传送20位地址,寻址能力为1M。其内部为16位结构,只能传送16位的地址,表现出的寻址能力只有64k。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XLGaTWKl-1665645686578)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904191330206.png)]

当8086cpu读写内存时,发生了一些事:

1.cpu相关部件提供两个16位的地址,一个为段地址,另一个为偏移地址。
2.段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
3.地址加法器将两个16位地址合并成一个20位的地址

地址加法器工作原理:
物理地址 = 段地址 ∗ 16 + 偏移地址 物理地址=段地址*16+偏移地址 物理地址=段地址16+偏移地址
eg:

8086cpu访问地址为123C8H的内存单元。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KnRSQeFL-1665645686578)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904191951205.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AREs6njY-1665645686578)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904192203541.png)]

段的概念

由于8086cpu用“(段地址*16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使我们可以用分段的方式来管理内存。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmV1kV1g-1665645686579)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220904193300821.png)]

#注意
1.段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数。
2.偏移地址为16位,16位地址的寻址能力为64k,所以一个段的长度最大为64k。

cpu访问内存单元时,必须向内存提供内存单元的物理地址。

8086cpu在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。

也就是说,它可以使用不同的段地址和偏移地址形成同一个物理地址。

偏移地址为16位,变化范围为0-FFFFH,仅用偏移地址最多可循64k个存储单元。

段寄存器

它用来提供段地址,共有4个段寄存器:

CS,DS,SS,ES

CS和IP

CS和IP是8086中最关键的寄存器,它们指示了cpu当前要读取指令的地址。

CS为代码段寄存器,IP为指令指针寄存器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbH7P2W5-1665645686579)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905165103923.png)]

#工作过程简要描述
1.从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器。
2.IP=IP+所读取指令的长度,从而指向下一条指令
3.执行指令并转回到步骤一。
在任何时候,CPU将CS,IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码并执行。
若内存中一段信息曾被cpu执行过,那么它所在的内存单元必然被CS:IP指向过。

修改CS,IP指令

转移指令:jmp段地址——偏移地址

jmp 2AE3:3————修改到2AE33
jmp 3:0B16————修改到0B46
功能:用指令中给出的段地址修改CS,偏移地址修改IP。

若仅修改IP内容:

jmp ax   类似于   mov IP,ax
功能:用寄存器中的值修改IP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N8ncAc0W-1665645686580)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905170323207.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XSt1y2O-1665645686580)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905170343039.png)]

代码段

将长度为N的一组代码,存在一组地址连续,起止地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。

eg:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UX0IkefP-1665645686580)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905170819334.png)]

字节长度为10
段地址为123BH

cpu只认被CS:IP指向的内容

所以要将CS:IP指向所定义的代码段中的第一条指令叫做首地址。

实验一

查看CPU和内存,用机器指令和汇编指令编程。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M6R8D8SM-1665645686581)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905172045442.png)]

寄存器(内存访问)

内存中字的存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LCvMZvXj-1665645686581)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905183159245.png)]

#结论
任何两个地址连续的内存单元,N单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。

DS和address

cpu要读取一个内存单元的时候,必须先给出这个内存单元的地址:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q1gBEw5M-1665645686581)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905183716529.png)]

#mov 寄存器名,内存单元地址
可以将数据直接送入寄存器
将一个寄存器的内容送入另一个寄存器中
将一个内存单元中的内容送入一个寄存器

上述中,[…]表示一个内存单元,其中的0表示内存单元的偏移地址。

在执行指令时,8086会自动取DS中的数据为内存单元的段地址。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrboMAR1-1665645686581)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905184517116.png)]

#注意:
8086不支持将数据直接送入段寄存器
正常为数据->通用寄存器->段寄存器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKcTQmpf-1665645686582)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905184826825.png)]

字的传送

8086是16位结构,有16根数据线,一次可传送16位数据,也就是一次性传送一个字。

mov bo,1000H
mov ds,bx
mov ax,[0]    --1000:0处的字型数据送入ax
mov [0],cx    --cx中的16位数据送到1000:0处

eg:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4YUqoz4z-1665645686582)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220905185348453.png)]

ax=1123
bx=8833
cx=8833

mov、add、sub指令

#mov
mov  寄存器,数据
mov  寄存器,寄存器
mov  寄存器,内存单元
mov  内存单元,寄存器
mov  段寄存器,寄存器
mov  寄存器,段寄存器
#add与sub与上述相同

数据段

将一组长度为N,地址连续且起止地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jlRHsbm-1665645686582)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220906154459261.png)]

如果要累加字型数据,则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IGAw3Znw-1665645686582)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220906154803954.png)]

一个字型数据为两个单元

栈是一种具有特殊的访问方式的存储空间,最后进入的最先出去。

cpu所提供的栈机制

也意味着,在基于8086编程时,可以将一段内存当作栈来使用。

PUSH ax:将寄存器ax中的数据送入栈中
pop ax:从栈顶取出数据送入ax

8086出入栈的操作均以字为单位来进行。

eg:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-omHV5HvI-1665645686583)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220906161016609.png)]

ax=1122
bx=2266
cx=0123
寄存器CS和IP种存放着当前指令的段地址和偏移地址。
段寄存器SS存放栈顶的段地址。
寄存器SP存放栈顶的偏移地址。
任意时刻,SS:SP指向栈顶元素

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtgHWWAb-1665645686583)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220915102336126.png)]

栈顶超界问题

当栈满的时候再使用push指令入栈,栈空再使用pop命令出栈,都会发生栈顶超界问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Sn7fQVX-1665645686583)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220915103423313.png)]

push与pop指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wl0SbIlL-1665645686583)(C:\Users\25964\AppData\Roaming\Typora\typora-user-images\image-20220915103924778.png)]

`

8086出入栈的操作均以字为单位来进行。

eg:

[外链图片转存中…(img-omHV5HvI-1665645686583)]

ax=1122
bx=2266
cx=0123
寄存器CS和IP种存放着当前指令的段地址和偏移地址。
段寄存器SS存放栈顶的段地址。
寄存器SP存放栈顶的偏移地址。
任意时刻,SS:SP指向栈顶元素

[外链图片转存中…(img-HtgHWWAb-1665645686583)]

栈顶超界问题

当栈满的时候再使用push指令入栈,栈空再使用pop命令出栈,都会发生栈顶超界问题。

[外链图片转存中…(img-2Sn7fQVX-1665645686583)]

push与pop指令

[外链图片转存中…(img-wl0SbIlL-1665645686583)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值