汇编学习笔记(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指令 -- 练习

答案:
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
死循环

- mov ax,bx
IP修改1次 - sub ax,ax
IP修改1次, ax = ax - ax = 0 - 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