介绍
机器语言是机器指令的集合
机器指令展开来讲就是一台机器可以执行的命令
电瓶脉冲 低位是0 高位时1
在内存或者硬盘中。数据都是一样的 都是二进制的
存储器
CPU 是计算机的核心部件 控制计算机所有运作 内存呢 就是存储指令
每个存储单元从0开始编号
一个存储器有 128个存储单元 0 - 127
一个存储单元 八个二进制位。等于一个字节的量
1 KB = 1024 B
1 MB = 1024 KB
1GB = 1024 MB
1 TB = 1024 GB
CPU 对数据读写 三种必须信息
地址信息 存储单元的地址
器件的原则读或者写。控制信息
读或写的数据 数据信息
地址和数据怎么传输到存储芯片中的 是已电信号 或者 导线
地址线
数据线
控制线
内存地址空间
随机存储器
只读存储器
8086 CPU
寄存器都是十六位的。可以存放两个字节
AX。 通用寄存器
BX 通用寄存器
CX 通用寄存器
DX 通用寄存器
SI
DI
SP
BP
IP 指令指针寄存器
CS 代码段寄存器
SS 段寄存器
DS 段寄存器 数据段寄存器
ES 段寄存器
PSW
AX BX CX DX
比如存储 18
二进制表示为 10010
存储形式 从高位到低位
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
比如存储 20000
二进制表示 0100111000100000
从高位到低位
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|
0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
一个十六位寄存器 所能存储的最大数据是
16 位的1 最大数据就是 2的十六次方 -1
8086 上一代的寄存器是八位的 为了能保证兼容性 这四个寄存器可以分为两个独立的八位寄存器
AX 可以分为 AH AL
BX 可以分为 BH BL
CX 可以分为 CH CL
DX 可以分为 DH DL
high 高 八位
low 低 八位
可整体存储 也可单独存储
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 左边 AX 右边 AL | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
汇编指令 (重点)
汇编指令 | 控制CPU操作 | 高级语言的描述 |
---|
mov ax,18 | 将18送入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 |
addd ax,bx | 将AX BX 中的内容想家 结果存放在AX 中 | AX = AX + BX |
mov move 传送 移动
第一个参数 目标位置 第二个参数原位置
程序中的指令 | 指令执行后AX中的数据 | 指令执行后BX中的数据 |
---|
mov ax, 4E20H | 4E20H | 0000H |
add ah,1406H | 6226H | 0000H |
mov bx,2000H | 6226H | 2000H |
add ax,bx | 8226H | 2000H |
mov bx,ax | 8226H | 8226H |
add ax,bx | ? | 8226H |
044CH
程序中的指令 | 指令执行后AX中的数据 | 指令执行后BX中的数据 |
---|
mov ax, 001AH | 001AH | 0000H |
mov bx, 0026H | 001AH | 0026H |
add al,b1 | 0040H | 0026H |
add ah,b1 | 2604H | 0026H |
add bh,al | 2604H | 4026H |
mov ah,0 | 0040H | 4026H |
add al,85H | 00C5 | 4026H |
add al,93H | ? | 4026H |
物理地址
CPU访问内存单元是要给出内存单元的地址 所有内存单元构成的存储空间是一个一维的线性空间
每个内存单元在这空间中都有唯一的地址 这个唯一的地址就叫做物理地址
8086 如何生成内存地址
运算器一次最多可以处理16位的数据
寄存器最大的宽度为16位
寄存器和运算器之间的通路是16位
8086 有20位地址总线 可传送20位地址 寻址能力为1M
物理地址 = 段地址 * 16 + 偏移地址
物理地址 = 基础地址 + 偏移地址
段地址 * 16 必然是 16的倍数 所以一个段的其实地址也一定是16的倍数
偏移地址是16位 16位地址的寻址能力位64k 所以一 个段的长度最大为64k
相对于基础地址 可以偏移多少地址
段寄存器
CS DS SS ES
段寄存器 就是提供段地址
mov move 传送 移动
第一个参数 目标位置 第二个参数原位置
将数据直接送入寄存器
将一个寄存器中的内容送入另一个寄存器中
一个内存单元中的内容送入一个寄存器
8086 CPU 不支持将数据直接送入段寄存器的操作 ds 是个段寄存器 只能通过一般寄存器放入段寄存器
mov ds,1000 是非法的
mov al,[0]
mov。寄存器 ,数据
mov。寄存器,寄存器
mov。寄存器,内存单元
jmp
段地址 :偏移地址。用指令中给出段地址修改CS 偏移地址修改IP
jmp 2AE3 : 3
jmp 3:0B16
仅仅修改 IP
jmp。ax。类似于 mov。IP,ax
sub
汇编减法
sub 寄存器,数据
sub 寄存器, 寄存器
sub 寄存器, 内存单元
sub 内存单元,寄存器
add
汇编加法
add 段寄存器, 数据
add 寄存器 ,寄存器
add 寄存器,内存单元
add 内存单元,寄存器
rom
在pc的主板上 ROM 又一个生产日期。在FFFF:0
FFF00 - FFFFF
push
送入栈内容
pop
取出栈内容
栈
栈是一个具有特殊方式访问的存储空间。特殊之处在于 最后进去的这个空间数据 最先出去