存储单元
微型机存储器的存储单元可以存储1个byte(字节),1个byte包含8个bit(位)
byte=B
1KB=1024B
1MB=1024KB
明确三个概念:
数据,控制,地址
一些基础操作及常识
MOV AX [3] ; //将3号单元的内容写入AX
8086数据线为16位 80396 32位 8088 8位
存储器
RAM 随机存储器 掉电丢 缓存等,显存,存放程序等
ROM 只读存储器 掉电不丢 多放模块的BIOS
由图可知:通过控制内部存储空间上数据的更改来控制外设。而注意这些逻辑地址是拟想的连续空间,其实是对器件的存储空间的连续寻址电路。
所以在对系统及其片上资源进行控制时,需要了解其内部空间地址的分布
寄存器
CPU内部是由运算器(信息处理),控制器,寄存器(信息存储)等构成。而程序员就是通过修改寄存器来实现对CPU的控制。
8086中 寄存器为16位
一般寄存器:AX(AH,AL) BX(BH,BL)等
两个BYTE(8位)组成一个字(16位)。
汇编不区分大小写
在使用寄存器需要注意:
1,AL,AH被使用时会被单独看成一个8位寄存器,AL的溢出进位不会存到AH中
2,寄存器与寄存器或者数据之间相互交换的时候,要注意位数相对应,以及存储数字的上下限。
16位CPU特征:
8086中地址总线为20位,其提供的数据位数为16为,所以要熟悉段地址+偏移地址的想法来进行寻址物理地址
这种方式形成了段思维,其完全以为这种寻址方式导致的,实际中不存在将内存分段,一般段地址需要在相加器中移位后和偏移地址相加
段寄存器cs和ip指令指针寄存器
8086中段寄存器有CS,DS,ES,SS 它们在8086要访问内存时提供内存单元的段地址
其中要主要地址合并时的操作传送指令mov 不能修改cs和ip的值
可以通过转移指令修改,如 jmp 段地址:偏移地址
例:jmp 2AE3:3 执行后:CS=2AE3H IP=0003H ,之后下一步将在2AE33H处取指令。
再如:jmp 3:0B16 ->: CS=0003H IP=0B16H
仅修改IP寄存器:
jmp ax ; //仅将ax中的值修改IP寄存器,CS寄存器中的值不变。
DEBUG SHELL
在DOSBOX环境下:
MOUNT C C:/DEBUG //路径下有DEBUG.EXE
C: //进入到挂载的C盘 即C:/DEBUG
DEBUG //进入DEBUG环境
R命令:查看或者修改当前所有寄存器的状态和值
-R //查看
-R AX //修改AX寄存器的值
-D命令:例
-D 1000:0 //格式为段地址:偏移地址 (终止偏移地址)
-E 可以指定修改内存中的内容,以16进制形式数据
-U 下方
-T 下方
-A 下方
寄存器(内存访问)
一些称呼:
地址字单元---在地址开始的连续两个存储单元(16位,2个BYTE)
DS和[address]
2C34H在10000H上的存储方式(8086)DS段寄存器,用来存储默认的段地址:
mov bx,1000h
mov ds,bx
mov ax [0] ;//8086通过ds中默认的段地址加上[0]偏移地址,取出1000h地址处的数据传入AX寄存器。
且注意:8086不支持对段寄存器传入数据操作。
注意:字数据在内存的存储方式
mov,add,sub
类似的add,sub指令不能对段寄存器进行直接操作,其他均可以
数据段:
自规定一段内存地址专门存放数据用,例如用DS存放数据段的段地址
实际上:数据和程序没有区别,被CS:IP指向的信息是程序;被传送,运算等指令操作的是数据。
reference:《汇编语言》王爽
网友评论