基础-1

存储单元

微型机存储器的存储单元可以存储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]

DS段寄存器,用来存储默认的段地址:

mov bx,1000h

mov ds,bx

mov ax [0] ;//8086通过ds中默认的段地址加上[0]偏移地址,取出1000h地址处的数据传入AX寄存器。

且注意:8086不支持对段寄存器传入数据操作。

注意:字数据在内存的存储方式


2C34H在10000H上的存储方式(8086)

mov,add,sub

类似的add,sub指令不能对段寄存器进行直接操作,其他均可以

数据段:

自规定一段内存地址专门存放数据用,例如用DS存放数据段的段地址

实际上:数据和程序没有区别,被CS:IP指向的信息是程序;被传送,运算等指令操作的是数据。


reference:《汇编语言》王爽

你可能感兴趣的:(基础-1)