汇编语言-王爽

1.基础知识

1.指令

1.相关概念:

  1. 机器指令:cpu能够直接识别并执行的二进制编码
  2. 汇编指令:与机器指令一一对应(助记符)
  3. 指令:由操作码和地址码(操作数)组成
  4. 指令集:不同cpu对应不同指令集
  5. 编译器:够将汇编指令转换成机器指令的翻译程序

2.汇编指令组成

  1. 汇编指令
  2. 伪指令
  3. 其他符号:+ – *等(由编译器识别,无对应机器码)
在这里插入图片描述

注:在内存或者磁盘上,指令和数据没有区别

2.存储器

1.类型

随机存储器(RAM):

在程序执行时可读可写,关机数据会清除

只读存储器(ROM):

在程序执行时只读,关机数据不会丢失

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.总线

1.概述

  1. 连接各个部件的信息传输线
  2. 主板上有核心器件和一些主要器件通过总线(地址总线、数据总线、控制总线)相连
  3. 这些器件有CPU、存储器、外围芯片组、扩展插槽(一般插有RAM内存条和各类接口卡)等

2.分类

1.根据位置

片内总线(芯片内部总线)

系统总线(加算计各部件之间的信息传输线)

2.根据逻辑
1.地址总线:
在这里插入图片描述
  1. cpu通过地址总线来制定存储单元
  2. 1根导线可以传送的稳定状态只有两种,高电平或是低电平(用二进制表示就是1或0)
  3. 图示有10根地址线即一次可以传输10位,访问存储单元地址为1011,寻址范围为0 ~ (210 – 1)
2.控制总线:在这里插入图片描述
  1. cpu与内存或者其他器件之间数据传送的介质
  2. 8根数据线一次可传送一个8位二进制数据(即一个字节),传送2个字节需要两次16根数据线一次可传送2个字节(内存对齐核心原理)
3.数据总线
在这里插入图片描述
  1. CPU对外部器件的控制是通过控制总线来进行
  2. 有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制
  3. 控制总线的宽度决定了CPU对外部器件的控制能力

3.应用

1.cpu对存储器的读取
在这里插入图片描述
  1. cpu通过地址线将地址信息3号发出
  2. cpu通过控制线发出内存读取命令(选择存储器),通知选中的存储器将从中读取数据
  3. 存储器将3号单元的数据(选中的存储器中的内存)8通过数据线传入cpu
2.cpu对存储器的写入cpu通过地址线将地址信息3号发出
  1. cpu通过控制线发出内存写入命令,通知选中的存储器要像其中写入数据
  2. cpu通过数据线将数据送入内存的3号单元(选中的存储器中的内存
3.cpu对外设的控制
  • CPU对外设都不能直接控制,如显示器、音箱、打印机
  • 直接控制这些设备进行工作的是插在扩展插槽上的接口卡
  • 扩展插槽通过总线和CPU相连,所以接口卡也通过总线同CPU相连
  • CPU可以直接控制这些接口卡,从而实现CPU对外设的间接控制
  • 如:CPU无法直接控制显示器,但CPU可以直接控制显卡,从而实现对显示器的间接控制

4.内存地址空间

  1. CPU将系统中各类存储器看作一个逻辑存储器(即内存地址空间)
  2. 对于CPU,所有存储器中的存储单元都处于一个统一的逻辑存储器中
  3. 它的容量受CPU寻址能力限制。(或许就是计组中学的统一编址)
在这里插入图片描述

每个物理存储器在这个逻辑存储器中占有一个地址段(即一段地址空间)

CPU在这段地址空间中读写数据(即在相对应的物理存储器中读写数据)ROM无效

在这里插入图片描述

2.寄存器

1.应用相关知识

1.CPU;

1.构成:

运算器、控制器、寄存器等器件构成,由片内总线相连

2.运行

运算器进行信息处理;控制器控制各种器件进行工作;寄存器进行信息存储

2.8086CPU:

1.组成:

有14个寄存器

AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW都是16位

在这里插入图片描述
2.结构特性
  • 运算器一次最多可以处理16位的数据
  • 寄存器的最大宽度为16位
  • 寄存器和运算器之间的通路为16位
3.处理数据类型
  • 字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
  • 字:记为word,一个字由两个字节组成,可以存在一个16位寄存器中(16位CPU)
在这里插入图片描述
4.存储模式

采用小端模式:高地址存放高字节,低地址存放低字节

2.通用寄存器

1.作用以及构成

通常用来存放一般性数据(AX,BX,CX,DX)

每一个寄存器均可以分成两个可独立使用的8位寄存器

16位8高位8低位
AXAHAL
BXBHBL
CXCHCL
DXDHDL

注意:

数据传送和运算的时候指令的两个而操作对象的位数应相同

一个8位寄存器所能存储的数据范围是0 ~ 28-1

2.8086cpu给出物理地址的方法

  • 8086CPU有20位地址总线,可以传送20位地址,达到1MB寻址能力
  • 8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位
  • 从8086CPU的内部结构来看,如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出的寻址能力只有64KB
  • 但是8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址
在这里插入图片描述

8086CPU读写内存时的过程

  • CPU中的相关部件提供两个16位的地址:
  • 一个称为段地址,一个称为偏移地址
  • 地址加法器将两个16位地址合成为一个20位的物理地址
  • 地址加法器采用物理地址 = 段地址×16 + 偏移地址的方法用段地址和偏移地址合成物理地址
  • 例:8086CPU要访问地址为123C8H的内存单元,1230H左移一位(空出4位)加上00C8H合成123C8H

3.段寄存器

1.定义

我们可以将一段内存定义为一个段

用一个段地址指示段,用偏移地址访问段内的单元(用分段的方式来管理内存)

  1. 用一个段存放数据,将它定义为“数据段”
  2. 用一个段存放代码,将它定义为“代码段”
  3. 用一个段当作栈,将它定义为“栈段”
2.注意:

一个段的起始地址一定是16的倍数

偏移地址为16位,变化范围为0-FFFFH,所以一个段的长度最大为64KB

CPU可以用不同的段地址和偏移地址形成同一个物理地址

3.段寄存器组成单元

8086CPU有4个段寄存器:CS、DS、SS、ES,提供内存单元的段地址

4.CS和IP
1.CS和IP概念
  1. CS为代码段寄存器,IP为指令指针寄存器
  2. CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址
  3. CPU将CS:IP指向的内容当作指令执行
在这里插入图片描述
2.8086CPU的工作过程简要描述
  1. 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
  2. P=IP+所读取指令的长度,从而指向下一条指令
  3. 执行指令,转到步骤1,重复这个过程
  4. 在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H(即在8086PC机刚启动时,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令)
  5. 8086CPU提供转移指令修改CS、IP的内容

jmp 段地址:偏移地址:

用指令中给出的段地址修改CS,偏移地址修改IP

例:jmp 2AE3:3

jmp 某一合法寄存器:

仅修改IP的内容

例:jmp ax(类似:mov IP ax)

3.8086CPU硬件设计

8086CPU不支持将数据直接送入段寄存器的操作

5.DS和adress
1.概述
  1. DS寄存器:通常用来存放要访问数据的段地址
  2. [address]:一个偏移地址为address的内存单元,段地址默认放在ds中
  3. 通过数据段段地址和偏移地址即可定位内存单元
2.实例:
mov bx, 1000H (8086CPU不支持将数据直接送入段寄存器的操作)

mov ds, bx (ds存放数据段地址)

mov [0], al (将al数据(1字节)存到1000H段的0偏移地址处,即10000H)

mov ax, [2] (将数据段偏移地址2处的一个字(8086为2字节)存放到ax寄存器)

add cx, [4] (将偏移地址4处的一个字数据加上cx寄存器数据放到cx寄存器)

sub dx, [6] (dx寄存器数据减去数据段偏移地址6处的字数据存到dx)
6.SS 和 SP

基于8086CPU编程的时候,可以将一段内存当作栈来使用

1.概述
  • 栈段寄存器SS:存放段地址
  • SP寄存器:存放偏移地址
  • 任意时刻,SS:SP指向栈顶元素
  • 8086CPU中,入栈时,栈顶从高地址向低地址方向增长
  • push ax表示将寄存器ax中的数据送入栈中,由两步完成1.将SS:SP指向的内存单元处的数据送入ax中2.SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶
在这里插入图片描述
2.实践
  1. 将10000H~1000FH这段空间当作栈,初始状态栈是空的
  2. 设置AX=001AH,BX=001BH
  3. 将AX、BX中的数据入栈
  4. 然后将AX、BX清零
  5. 从栈中恢复AX、BX原来的内容mov ax, 1000H
    mov ss, ax
    mov sp, 0010H   ;初始化栈顶
    mov ax, 001AH
    mov bx, 001BH

    push ax
    push bx   ;ax、bx入栈

    sub ax, ax   ;将ax清零,也可以用mov ax,0,
                ;sub ax,ax的机器码为2个字节,
                ;mov ax,0的机器码为3个字节。
           
    sub bx, bx

    pop bx ;从栈中恢复ax、bx原来的数据
    pop ax ;
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇