汇编语言学习(对于8086CPU)

汇编语言学习(对于8086CPU)

前言:学了计算机导论再来学会更好,推荐也学一下计算机组成原理(只学过导论也可以)

这篇笔记没有前置理论知识,不讲历史之类的

直接从汇编开始

CPU寄存器

通用寄存器

  1. 首先,CPU需要除了ALU(运算)和CU(控制)还需要存储(寄存器)

  2. 此时,引出我们能够使用的:

    • 四个通用寄存器:AX,BX,CX,DX
    • 是16位的,也就是4个4位,就是4个16(2^4)进制数
    • 他们可以各自分割成2个8位寄存器,为了兼容以前
    • 高8位(AH,BH,CH,DH)
    • 低8位(AL,BL,CL,DL)
  3. 8086CPU有16根地址线:

    • 一次可以处理两种尺寸的数据:
      • 字节型数据:8bit——8位寄存器
      • 字型数据:16bit——16位寄存器

前期常用指令及语法

mov(赋值): mov 寄存器 值 mov 寄存器 寄存器

add(加): add 寄存器 值 add 寄存器 寄存器

sub(减): sub 寄存器 值 sub 寄存器 寄存器

jmp:见下面cs:ip寄存器讲解

地址寄存器

  1. 8086中地址由段地址和偏移地址组成

  2. 原因是设计问题:

    • 地址线多(有20根)
    • 但寄存器小(只有16位)
    • 怕浪费了地址线,所以提出
  3. 通过地址加法器算出实际地址

    • (段地址 * 16) + 偏移地址 = 物理地址
  4. 段地址寄存器 偏移地址寄存器
    ds sp
    es bp
    ss si
    cs di
    ip
    bx

cs:ip寄存器

  1. 我们知道:一般计算机用指令和数据都用二进制表示,没有区别
  2. 那计算机该如何区分指令和数据呢
  3. 此时我们引出cs:ip
  4. 上面的表中我们可以看到cs是段寄存器,ip是偏移地址寄存器
  5. 我们此时用cs和ip一起可以指向可以真实的物理地址
  6. 那么我们规定:cs:ip指向的那个地址存放的是指令
  7. 此时我们需要一步一步的执行和跳转,那么我们就要控制cs:ip的地址
    1. 每次执行后ip会自增指令的长度
    2. jmp语句可以进行对cs:ip进行改变
    3. jmp的语法:
      • jmp cs:ip 例如:jmp 2000:0 修改cs:ip两个
      • jmp 寄存器 例如:jmp ax 修改ip一个

内存

  • 一个“字型”数据存放在内存中,可以由 “2个” “连续的” 地址内存单元组成
  • 高地址存放“字型”的高位“字节
  • 低地址存放“字型”的低位“字节

例如:一个虚拟的地址空间

地址
0 10H
1 05H
2 2EH
3 3AH

此时:

0的字节型是10H,0的字型是0510H

2的字节型是2EH,2的字型是3A2EH

1的字节型是05H,1的字型是2E05H


可以使用ds段地址寄存器来使寄存器访问内存的数据

例如:

mov bx,1000H

mov ds,bx

mov ax,ds:[0] mov ds:[0],ax


  1. 栈是一段连续的内存单元,也就是一段连续的内存地址
  2. 栈的访问形式是后进先出(LIFO)
  3. 通过改变栈顶标记进行入栈出栈
  4. 使用ss:sp寄存器进行组合
  5. 指令:只能操作字型数据或者16位寄存器,操作的都是ss:sp的数据
    • push:入栈 例如:push ax
    • pop: 出栈 例如:pop ax

未完

posted @ 2022-05-04 18:41  CoderCatIce  阅读(96)  评论(0编辑  收藏  举报