汇编学习笔记(8086)

这个只是一个复习笔记,只是单纯的脑子笨,把之前的学过的知识捋一遍而已,并不是教什么。
如果之前没学过汇编的童鞋还是别看了,学过的看一大体回顾一下。

特别感谢 hank老师 的帮助,么么哒~

一.总线

地址总线

1.它的宽度决定了CPU的寻址能力
2.8086的地址总线宽度是20,所以寻址能力是1M(2^20)
3.一个宽度单位能提供2种电压,所以20个单位就能提供2^20中电压组合

数据总线

1.它的宽度决定了CPU的单词数据传送量,也就是数据传送速度
2.8086的数据总线宽度是16,所以单词最大传递2个字节数据(2*16)

练习题

  • 一个CPU 的寻址能力为8KB,那么它的地址总线的宽度为____
    2^X = 8KB = 8 * (2^10) = 2^3 * 2^10 = 2 ^ 13
    答案:13

  • 8080,8088,80286,80386 的地址总线宽度分别为16根,20根,24根,32根.那么他们的寻址能力分别为多少____KB, ____MB,____MB,____GB?
    8080:
    2 ^ 16 = 2 ^ 6 * 2 ^ 10 = 2 ^ 6KB = 64KB
    答案:64KB、1MB、16MB、4GB

  • 8080,8088,8086,80286,80386 的数据总线宽度分别为8根,8根,16根,16根,32根.那么它们一次可以传输的数据为:____B,____B,____B,____B,____B
    8080:
    2 * 8 = 2B
    答案:1B、1B、2B、2B、4B

  • 从内存中读取1024字节的数据,8086至少要读____次,80386至少要读取____次.
    8086:
    读数据是依靠数据总线,8086是的数据总线宽度是16。一次能读2字节,所以读取2^10字节 需要 2 ^ 9次,即512次。
    答案:512次、256次

二.寄存器

字和字节

字节:byte,1个字节由8bit组成,可以存储在8位寄存器中
字:word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节

8086的寻址方式

  • 物理地址:CPU访问内存单元时,要给出内存单元的地址,所有的内存单元都有唯一的地址
  • 物理地址 = 段地址X16 + 偏移地址

代码段 - CS和IP

mov指令不能用于设置CS、IP的值

指令的执行过程

(正在研究markdown插入视频,有会的麻烦联系我 /(ㄒoㄒ)/~~)
CPU指令执行过程 视频

注意:IP的值会先自加,然后执行命令

三.jmp指令


jmp指令 -- 练习

image


答案:
0
CS 2000H
IP 0000H
1
AX 6622H
CS 2000H
IP 0003H
2
AX 6622H
CS 1000H
IP 0003H
3
AX 0000H
CS 1000H
IP 0006H
4
AX 0000H
BX 0000H
CS 1000H
IP 0008H
5
AX 0000H
BX 0000H
CS 1000H
IP 0000H
6
AX 0123H
BX 0000H
CS 1000H
IP 0003H
7
死循环

  1. mov ax,bx
    IP修改1次
  2. sub ax,ax
    IP修改1次, ax = ax - ax = 0
  3. jmp ax
    IP修改2次 IP = 0

四.数据段 - DS和[address]

  • 8086不支持将数据直接送入段寄存器中,mov ds,1000H是错误的
  • 正确的输入方式如下

mov bx,1000H ;将段地址给bx
mov ds,bx ;把bx里面的地址值给数据段段寄存器(dx)
mov al,[0] ;将10000H(1000:0)中的内存数据赋值到al寄存器中(将DS:address中的内存数据赋值到al寄存器中)
mov [0],al ;将al中的值给 1000:0

五.栈段 - SS 和 SP

  • SS存放栈段的段地址,用SP存放栈顶的偏移地址
  • push -sp
  • pop +sp

你可能感兴趣的:(汇编学习笔记(8086))