精华内容
下载资源
问答
  • 只有bx,si,di,bp可以在[ ]进行内存单元寻址,只能有4种组合 [bx+si],[bx+di],[bp+si],[bp+di] bx没有显示指定段地址默认在ds中 例子:mov ax,[bx+si]=(ax)=(ds*16+bx+si) bp没有显示指定段地址默认在ss中 例子:...

    只有bx,si,di,bp可以在[ ]进行内存单元寻址,只能有4种组合

    [bx+si],[bx+di],[bp+si],[bp+di]

    bx没有显示指定段地址默认在ds中   例子:mov ax,[bx+si]=(ax)=(ds*16+bx+si)

    bp没有显示指定段地址默认在ss中   例子:mov ax,[bp+si]=(ax)=(ss*16+bx+si)



    指定指令处理数据长度:

    1寄存器指定:mov ax,1    ax是16位寄存器,指定数据长度为16位,2个字节,一个字

    mov al,1     al是8位寄存器,指定数据长度为8位,1个字节

    2显示指定: X ptr    mov byte ptr, ds:[0],1  指定数据长度为一个字节,ds:[0]=01

     mov wort ptr ds:[0] ,1 指定数据长度为一个字,2个字节 ds:[0]=01 ds:[1]=00




    内存偏移地址组合灵活性可以应用于二维数组,结构体等数据结构

    二维数组:[bx+idata]

    结构体:[bx].idata[si]=[bx+idata+si],bx定位结构体,idata定位数据项,si定位数据项的每一个元素


    div除法指令:

    1除数有8位和16位两种,放在内存单元或者寄存器中

    2被除数:默认在AX(16位)或DX+AX(32位)中,如果除数是8位,被除数就是16位,默认存放在AX中,如果除数是16位,被除数就是32位,在DX+AX中存放,DX存放高位,AX存放低位

    3结果:除数是8位,商在AL中,余数在AH中

         除数是16位,商在AX中,余数在DX中


    例子:

    div byte ptr ,ds:[0]   含义:  (al)=(ax)/(ds*16+0)   商在al中        (ah)=(ax)/(ds*16+0)    余数在ah

    div word ptr ,es:[0]   含义: (ax)=((dx)*10000H+(ax))/(es*16+0)商在aX中       (dx)=((dx)*10000H+(ax))/(es*16+0)  余数在dx中   



    假如一个程序:100001/100

    assume cs:code
    code segment
    	 start: mov dx,1
    		mov ax,86A1H	;(dx)*10000H+(ax)=100001
    		mov bx,100
    		div bx	
    
    		mov ax,4c00h
    		int 21h
    code ends
    end start

    被除数大于65535,大于16位,用dx和ax存放,除数100小于255,8位寄存器可以存放,但是被除数是32位, 所以除数要用16位寄存器存放




    mul指令:乘法指令

    两个相乘的数:要么都是8位,要么都是16位,如果是8位,一个默认在al中,另一个放在8位寄存器或内存字节单元中,如果是16位,一个默认在AX中,另一个放在16位寄存器或内存字单元中

    相乘的结果:8位相乘,结果放在AX中,16位相乘,结果放在DX和AX中,高位放在DX,低位放在AX


    指令格式:mul reg(寄存器) mul 内存单元

    例子:计算100*1000 100可以用8位存,1000要用16位存,所以要用16位相乘

    mov ax,100

    mov bx,1000

    mul bx 





    展开全文
  • 当数据存放在内存中时,可以使用多种方式来给定这个内存单元的偏移地址,这种定位内存单元的方法被称为寻址方式。 指令读取与执行 定位内存单元寻址方式有5种: 一. 直接寻址 寻址方式:[idata] 含义...

    当数据存放在内存中时,可以使用多种方式来给定这个内存单元的偏移地址,这种定位内存单元的方法被称为寻址方式。

    指令读取与执行
    0001

    定位内存单元的寻址方式有5种:
    多种寻址方式

    一. 直接寻址

    寻址方式:[idata] 
    含义: EA = idata 
    寻址过程: 例:mov ax,ds:[000E] 
    例:mov ax,[5]; (ax)=((ds)*16+5) 

    CS 和 IP 中的地址通过地址加法器进行移位相加得到代码的物理地址,通过地址总线进入内存,取出相应地址的机器码 000EA1,通过数据总线传到指令缓冲寄存器,读取指令判断是直接寻址,则通过段地址 ds和偏移地址 [000E] 得到数据的物理地址,在内存中取出。

    二. 寄存器间接寻址

    寻址方式: [bx] 
    含义: EA = (bx) 
    寻址过程: 例: mov ax,[bx] 
    例:mov ax,[bx]; (ax)=((ds)*16+(bx))

    CS和IP中的地址通过地址加法器进行移位相加得到代码的物理地址,通过地址总线进入内存,取出相应地址的机器码078B,通过数据总线传到指令缓冲寄存器,读取指令判断是寄存器间接寻址,则通过段地址 ds 和寄存器 BX 提供的偏移地址得到数据的物理地址,在内存中取出。

    三. 寄存器相对寻址

    寻址方式:[bx+idata] 
    含义: EA = (bx)+idata 
    寻址过程: 例: mov ax,[bx+1] 
    例:mov ax,[bx+5] ;(ax)=((ds)*16+(bx)+5) 

    CS和IP中的地址通过地址加法器进行移位相加得到代码的物理地址,通过地址总线进入内存,取出相应地址的机器码 01478B ,通过数据总线传到指令缓冲寄存器,读取指令判断是寄存器相对寻址,则通过段地址 ds 和寄存器 BX 提供的内容加上一得到偏移地址从而得到数据的物理地址,在内存中取出。

    四. 基址变址寻址

    寻址方式: [bx+si] ; [bx+di] 
    含义: EA = (bx)+(si) ; EA = (bx)+(di)
    (可以表示为[bx][si],相当于一个二维数组 )
    寻址过程: 例: mov ax,[bx+si] 
    例:mov ax,[bx+si]; (ax)=((ds)*16+(bx)+(si)) 

    CS和IP中的地址通过地址加法器进行移位相加得到代码的物理地址,通过地址总线进入内存,取出相应地址的机器码 008B ,通过数据总线传到指令缓冲寄存器,读取指令判断是基址变址寻址,则通过段地址ds和寄存器BX提供的内容加上源寄存器 SI提供的内容得到偏移地址从而得到数据的物理地址,在内存中取出。

    五. 相对基址变址寻址

    寻址方式: [bx+si+idata] ; [bx+di+idata] 
    含义: EA = (bx)+(si)+idata ; EA =(bx)+(di)+idata 
    寻址过程: 例: mov ax,[bx+si+1] 
    例:mov ax,[bx+si+5]; (ax)=((ds)*16+(bx)+(si)+5) 
    
    

    CS和IP中的地址通过地址加法器进行移位相加得到代码的物理地址,通过地址总线进入内存,取出相应地址的机器码 01408B ,通过数据总线传到指令缓冲寄存器,读取指令判断是相对基址变址寻址,则通过段地址ds和寄存器BX提供的内容加上源寄存器SI提供的内容再加上一得到偏移地址从而得到数据的物理地址,在内存中取出。

    六.寻址方式多样性的意义

    在效率和方便性上找一个平衡。立即数寻址和寄存器寻址在效率上是最快的,但寄存器仅有几个非常宝贵不可能将操作数都存入其中等待使用,立即数的使用场合也非常有限,这样就需要将数据保存在内存中,然后使用直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址这些寻址方式将内存中的数据移入寄存器中。

    展开全文
  • Linux 内存寻址

    2014-03-06 14:00:57
    80x86微处理器下的三种不同的...物理地址:芯片内存单元寻址 MMU 通过分段单元将 逻辑地址转换为线性地址; 分页单元将线性地址转换为物理地址; 分段的过程: 段选择符有三个字段: 1)Index字段,表示

    80x86微处理器下的三种不同的地址:

    逻辑地址:16位段选择符+32位offset, 段选择符存放在段寄存器中
    线性地址:也称为虚拟地址,32bit 体系结构可以表达4GB的地址空间
    物理地址:芯片内存单元寻址

    MMU 通过分段单元将 逻辑地址转换为线性地址;
    分页单元将线性地址转换为物理地址;

    分段的过程:

    段选择符有三个字段:
    1)Index字段,表示在GDT或者LDT中相应的段描述符的索引
    2)TI,两个描述符表的标志,用于区分
    3)RPL,特权级

    首先从TI字段中决定段描述符保存在哪一个描述符表中,从相应的gdtr或ldtr及寄存器中得到相应的描述符表的基地址
    然后将index字段乘以8(一个描述符的大小)加上基地址得到段描述符的地址

    段描述符中有一个字段是Base字段,将逻辑地址中的offset与这个Base字段相加就得到了线性地址。这就完成了从逻辑地址到线性地址的转换。
    在Linux中,段描述符中的Base字段全部是0x00000000,所以逻辑地址中的offset与线性地址在这个意义上是相等的。
    Linux只是象征性地使用了分段机制,目的可能是为了满足可移植性和内存管理的简便。

    分页单元把线性地址转换成物理地址:

    page:一组线性地址,在内存管理中它是最小的单位,它可以指这组地址中的数据块
    page frame:物理页,是RAM的一个区域,表示内存的一部分
    page table: 页表存放在主存中,是一种将线性地址隐射到物理地址的数据结构



    以上是比较常规的分页,Linux采用三级页表或者四级页表,也就是32为的线性地址多划分两个域出来而已
    其中:CR3寄存器存放的是当前活动进程的页目录的物理地址,这是进程上下文的一部分,也就是说当发生进程切换的时候,CR3寄存器的值会被重写,当然,如果两个 进程使用相同的working page set,也就是共享页表结构,那么该寄存器不会被重置(不太确定?有路过的大神求解释下)
    线性地址的高10位表示在页目录中的offset,找到页目录项之后,就有了页表的地址,中间10位有是在页表中的offset,这样找到了页表,得到页框的物理地址,最后12位是数据在页框中的offset,12 bit, 4KB大小的页
    总共就是1024*1024*4096=2^32

    其中页表项中有一个present标志,如果该标志是0,说明这页数据没有在main memory中,产生一个异常page fault
    还有一个dirty标志,用于write-back。

    Linux中的分页模式一般是3级页表,线性地址被划分为5个域:
    Page global directory
    Page Upper dir.
    Page Middle dir.
    Page table 页表
    offset

    最后提一个TLB缓存,目的是为了加速从虚拟地址到物理地址的隐射,每一个entry会缓存一个VA到一个PA直接的隐射关系。 



    展开全文
  • Intel80x86内存寻址

    2017-04-28 09:31:26
    Intel80x86内存寻址一、内存地址地址分为三种: 逻辑地址 使用这种地址指定一个操作数或一条指令的地址,由16位的段(segment)和32位的...用于芯片级内存单元寻址,由32位无符号整数表示 CPU通过分段单元把一个逻辑地

    Intel80x86内存寻址

    一、内存地址

    地址分为三种:

    • 逻辑地址
      使用这种地址指定一个操作数或一条指令的地址,由16位的段(segment)和32位的偏移量(offset)组成
    • 线性地址
      32位无符号整型,最高可表示4GB地址,通常用16进制数字表示,值的范围从0x00000000到0xffffffff。
    • 物理地址
      用于芯片级内存单元寻址,由32位无符号整数表示

    CPU通过分段单元把一个逻辑地址转换为线性地址,接着,分页单元把线性地址转换为物理地址
    这里写图片描述

    二、硬件分段单元

    从80386开始,Intel处理器能执行两种不同的地址转换模式,为实模式和保护模式。保留实模式是要与早期的CPU保持兼容。下面重点讨论保护模式。

    1、段选择符

    一个逻辑地址分为段选择符和指定段内相对地址的偏移量,段选择符是一个16位的域,指明段描述符的位置。
    这里写图片描述
    s表示段号,g表示在GDT还是LDT中,p表示保护信息。
    GDT和LDT中表项个数最多是2的13次方,即8192项。偏移量是32位长的域。为了快速找到段选择符,处理器设置6个段寄存器,cs,ss,ds,es,fs,gs,允许同时访问6个段。

    2、段描述符

    每个段由8个字节的段描述符表示,它描述了段的特征,显然寄存器存储不了太多的描述符,因此,这些描述符被存放在内存中,包括全局描述符表(GDT)和局部描述符表(LDT)。通常系统中只有一个GDT,而每一个进程可以有自己的LDT,GDT的地址放在gdtr中,LDT地址放在ldtr中。Intel处理器提供了一组非编程的寄存器,供6个可编程的段寄存器使用。每一个非编程的寄存器含有8个字节的描述符,由相应的段寄存器中的段选择符所指定。每当一个段选择符被装入段寄存器,相应的段描述符就被装入对应的寄存器中。
    这里写图片描述
    段描述符格式,具体的含义可查官方文档
    地址
    由于一个段描述符是8个字节长,它在GDT或LDT中的地址可由段选择符的高13位乘8加上gdtr中的基址得出。GDT的第一项总是为0,这样可以保证段选择符为空的逻辑地址被认为是无效的。

    3、逻辑地址到线性地址转换

    转换步骤如下:
    这里写图片描述

    • 1、确定段表在GDT中还是LDT中
    • 2、由段选择符的索引域计算出段描述符的地址,即索引域值乘8加gdtr或ldtr的值。
    • 3、把逻辑地址的偏移量和描述符基地址域的值相加,就得到了线性地址。

    由于寄存器的存在,只有当段寄存器的内容被改变时才需要执行前两步操作。

    未完待更。。。

    展开全文
  • linux内存寻址解析

    千次阅读 2016-01-10 20:20:43
    1.内存地址 1.逻辑地址:每一个逻辑地址都有...3.物理地址:用于内存芯片级内存单元寻址 内存控制单元(MMU)将逻辑地址转化成线性地址,再转化成物理地址。 2.硬件中的分段 1.段选择符(段寄存器 )  (1.包括:索引、
  • 内存寻址

    2018-09-24 20:10:26
    1.内存寻址 逻辑地址 包含在机器语言中用来 指定一个操作数或者一条指令的地址。 每个逻辑地址由一个段segment 和 偏移量offset 组成,偏移量表示从段开始的...用于内存芯片级内存单元寻址,与从微处理器的地...
  • 地址总线宽度为32位,一次可以发送的一个数据是32位的,则寻址单元最大就是32位数据的最大值,就是2的32次方。地址总线宽度 地址总线宽度决定了CPU可以访问的物理地址空间,简单地说就是CPU到底能够使用多大容量的...
  • linux内存寻址解析 (一)

    千次阅读 2016-05-14 10:29:06
    1.内存地址 1.逻辑地址:每一个逻辑地址都有一个...3.物理地址:用于内存芯片级内存单元寻址 内存控制单元(MMU)将逻辑地址转化成线性地址,再转化成物理地址。 2.硬件中的分段 1.段选择符(段寄存器 )
  • 深入理解Linux内核day01--内存寻址

    千次阅读 2016-04-26 18:43:17
     物理地址: 用于内存芯片级内存单元寻址。他们与微处理器地址引脚发送到内存总线上的电信号相对应  内存控制单元(MMU) 通过一种称为分段单元的硬件店里把一个逻辑地址转换为线性地址,接着通过分页单元的硬件...
  • Linux内核之内存寻址

    2017-12-17 11:41:53
    内存寻址概要
  • 内存寻址方式

    千次阅读 2017-04-08 11:44:35
    l 理解程序在访问内存单元时采用的各种寻址方式 l 学会基于字符的ASCII编码,进行大小写转换、简单加密等方法 l 学会用loop指令,结合寻址方式,编制单层和双层循环程序解决问题 二、实验内容过程记录 任务
  • 内存寻址 笔记

    2016-12-11 10:41:27
    logical address逻辑地址(segment + offset) -> [segment unit分段单元] -> virtual address虚拟地址 -> [paging unit分页单元] -> physical address物理地址 memory arbiter内存仲裁器 分段寻址方式 分页寻址...
  • 计算机内存寻址

    千次阅读 2015-11-01 23:14:22
    他们之间有什么关系,内存是如何寻址,本文主要介绍的就是内存寻址。 1、基本概念: cpu段式管理:段式管理的基本原理是指把一个程序分成若干个段(segment)进行存储,每个段都是一个逻辑实体(logical entity)...
  • 内存地址与寻址

    2017-10-23 13:07:47
    先理清楚2个单位概念: ①位(bit):计算机存储信息的最小单位。 ②字节(Byte):计算机存储信息的基本单元,1Byte = 8 bit。   bit在大多数情况都以“了解硬件的...因此,寻址是对于Byte而言的,而不是对于bit。
  • 内存寻址 、硬件中的分段与分页 、Linux内存管理 页与内存管理区 、kmalloc()和vmalloc()
  • MMUMMU(内存管理单元)的功能是将逻辑地址转换成物理地址。其中包括: 分段单元,将逻辑地址转换成线性...物理地址,用于内存芯片寻址。 段标识符: | index<15-3> |ti<2> | RPL<1-0> | 段描述符: (段标识符->ind
  • 内存的编址和寻址、内存对齐 ...内存单元的2个概念:地址和空间是内存单元的两个方面。 2.关键:内存的编址以字节为单位 如果把内存比作大楼,那么一个个房间就是内存格子。其中格子的大小是固定的,即8bit。 3
  • linux内核-内存寻址

    2013-09-29 10:15:00
    程序员偶尔会引用内存地址作为访问内存单元的一种方式,但是,使用X86处理器时,我们必须区分以下三种不同的地址: 逻辑地址:每一个逻辑地址都是由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的...
  • 4.2 内存访问指令寻址 根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种。 ① 字及无符号字节的Load/Store指令的寻址方式。 ② 杂类Load/Store指令的寻址方式。 ③ 批量Load/Store指令...
  • 保护模式下寻址 段机制实例分析如图,8086内部有8个16位寄存器,AX BX CX DX SI DI BP SP为了加快指令执行速度,8086内部有一个6字节的指令预取队列,当处理器执行不需要访问内存的指令时,指令预取部件访问内存预取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,532
精华内容 17,812
关键字:

内存单元寻址