`

第三章 寄存器(内存访问)

阅读更多
2012年12月19日 星期三 16时21分45秒   /  2014年1月26日 星期日 10时27分31秒

P129

第三章 寄存器(内存访问)

3.1 内存中字的存储
     任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。  
      
     我们将起始地址为N的字单元称之为N地址字单元。
3.2 DS和[address]
     DS寄存器通常用来存放要访问的数据的段地址。
     mov al,[0]
     已知的mov指令可完成的两种传送功能:
        (1)将数据直接送入寄存器;
        (2)将一个寄存器中的内容送入另一个寄存器中。
           mov 指令 还可以将一个内存单元中的内容送入一个寄存器。

        mov bx,1000H
        mov ds,bx
        mov al,[0]
        首先将基地址1000H放入一般的寄存器,通过mov指令,将一般寄存器bx中数据送入到ds寄存器中,然后CPU通过取ds中的段地址+[0]偏移地址得到最终的内存地址,并将这个地址中的数据送入到al中。
       
        记住:8086PC不能直接将段地址送入到ds寄存器中。

        思考:
                从内存单元数据送入到寄存器用 "mov 寄存器 内存单元地址",那么将寄存器的数据送入内存单元呢?
                        mov bx,1000H
                        mov ds,bx
                        mov [0],a1

3.3 字的传送
        8086CPU是16位结构。  一次可以传递2个字节,即一个字。
       
3.4 mov,add,sub指令
        mov 指令用法:
                mov 寄存器,数据        mov ax,8
                mov 寄存器,寄存器      mov ax,bx

                mov 段寄存器,寄存器    mov ds,ax
                mov 寄存器,段寄存器    mov,ax,ds

                mov 寄存器,内存单元    mov ax,[0]
                mov 内存单元,寄存器    mov [0],ax
              
                mov 段寄存器,内存单元  mov ds,[0]
               
         add和sub指令一样,基本上都有这样的操作。     
       
3.5 数据段
        可以将一组长度为N(N<=64KB),地址连续,起始地址为16的倍数的内存单元当作专门存储数据的空间,从而定义一个数据段。
        例如可以认为123B0H---123B9H这段内存是一个数据段。实现累加这个数据段中的前3个单元中的数据。如下:
        首先查看123B:0处的内存值。
        -d 123B:0
        123B:0000  04 22 5C 44 04 22 5C 44-04 22 BE 43 AF 21 BE 43   ."\D."\D.".C.!.C
       
        可以看到前三个内存单元的值为,04,22,5c 则结果应该是04+22+5c=82   下面来验证是否是这个结果。
                -a
                13EA:010B mov ax,123B
                13EA:010E mov ds,ax
               13EA:0110 mov al,0
               13EA:0112 add al,[0]
               13EA:0116 add al,[1]
               13EA:011A add al,[2]
               13EA:011E
               -r
               AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
               DS=13EA  ES=13EA  SS=13EA  CS=13EA  IP=0100   NV UP EI PL NZ NA PO NC
               13EA:0100 B83B12        MOV     AX,123B
               -
               -r ip
               IP 0100
               :010B
               -t

               AX=123B  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
               DS=13EA  ES=13EA  SS=13EA  CS=13EA  IP=010E   NV UP EI PL NZ NA PO NC
               13EA:010E 8ED8          MOV     DS,AX
               -
               -t

               AX=123B  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
               DS=123B  ES=13EA  SS=13EA  CS=13EA  IP=0110   NV UP EI PL NZ NA PO NC
               13EA:0110 B000          MOV     AL,00
               -t

               AX=1200  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
               DS=123B  ES=13EA  SS=13EA  CS=13EA  IP=0112   NV UP EI PL NZ NA PO NC
               13EA:0112 02060000      ADD     AL,[0000]                          DS:0000=04
               -t

               AX=1204  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
               DS=123B  ES=13EA  SS=13EA  CS=13EA  IP=0116   NV UP EI PL NZ NA PO NC
               13EA:0116 02060100      ADD     AL,[0001]                          DS:0001=22
               -t

               AX=1226  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
               DS=123B  ES=13EA  SS=13EA  CS=13EA  IP=011A   NV UP EI PL NZ NA PO NC
               13EA:011A 02060200      ADD     AL,[0002]                          DS:0002=5C
               -t

               AX=1282  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
               DS=123B  ES=13EA  SS=13EA  CS=13EA  IP=011E   OV UP EI NG NZ AC PE NC
               13EA:011E D913                  FST     DWORD PTR [BP+DI]              SS:0000=2
               0CD
               -
               可以发现AL确实等于82.
       
3.6 栈
        后进先出

3.7 CPU提供的栈机制
        8086CPU的入栈和出栈都是以字为单位进行的。
                -a
                1386:0128 mov ax,0123
                1386:0128 pus ax
                1386:0128 mov bx,2266
                1386:0128 pus bx
                1386:0128 mov cx,1122
                1386:0128 pus cx
                1386:0128 pop ax
                1386:0129 pop bx
                1386:012A pop cx
                1386:012B
                -t

                AX=0123  BX=0000  CX=0000  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=011F   OV UP EI PL NZ NA PE CY
                1386:011F 50            PUSH    AX
                -t

                AX=0123  BX=0000  CX=0000  DX=0000  SP=FFEA  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=0120   OV UP EI PL NZ NA PE CY
                1386:0120 BB2602        MOV     BX,0226
                -t

                AX=0123  BX=0226  CX=0000  DX=0000  SP=FFEA  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=0123   OV UP EI PL NZ NA PE CY
                1386:0123 53            PUSH    BX
                -t

                AX=0123  BX=0226  CX=0000  DX=0000  SP=FFE8  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=0124   OV UP EI PL NZ NA PE CY
                1386:0124 B92211        MOV     CX,1122
                -t

                AX=0123  BX=0226  CX=1122  DX=0000  SP=FFE8  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=0127   OV UP EI PL NZ NA PE CY
                1386:0127 51            PUSH    CX
                -t

                AX=0123  BX=0226  CX=1122  DX=0000  SP=FFE6  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=0128   OV UP EI PL NZ NA PE CY
                1386:0128 58            POP     AX
                -t

                AX=1122  BX=0226  CX=1122  DX=0000  SP=FFE8  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=0129   OV UP EI PL NZ NA PE CY
                1386:0129 5B            POP     BX
                -t

                AX=1122  BX=0226  CX=1122  DX=0000  SP=FFEA  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=012A   OV UP EI PL NZ NA PE CY
                1386:012A 59            POP     CX
                -t

                AX=1122  BX=0226  CX=0123  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
                DS=1282  ES=13EA  SS=13EA  CS=1386  IP=012B   OV UP EI PL NZ NA PE CY
                1386:012B 0000          ADD     [BX+SI],AL                         DS:0226=44
                -
                栈顶的段地址存放在段寄存器SS中,偏移地址存放在SP中。
                SS:SP指向栈顶元素
                8086中寄存器SS和寄存器SP分别存放栈顶的段地址和偏移地址。
               
                当栈为空时,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的元素,该单元的偏移地址为栈最底部的字单元的偏移地址+2,若栈最底部的单元地址为1000:000E,怎空栈时,SP=0010H。

3.8 栈顶超界的问题
        8086没有校验栈顶栈底的机制,所以要自己小心这方面。
3.9 push,pop指令
        push|pop  段寄存器
        push|pop  内存单元
        push|pop  寄存器

3.10 栈段
        栈段和代码段数据段一样。
        如何使得如push,pop等栈操作指令访问我们定义的栈?即将SS:SP指向我们定义的栈段
       

实验2 用机器指令和汇编指令编程
      实验一:Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。
     
   

                                                                         2014-2-17 16:17 记 @fuxingmen.xichengqu.beijing
























分享到:
评论

相关推荐

    《汇编语言》 第3章 寄存器(内存访问).ppt

    《汇编语言》 第3章 寄存器(内存访问).ppt

    《汇编语言》 第3章 寄存器(内存访问)

    汇编语言第三章寄存器(内存访问)知识点总结 本章主要讲解了寄存器在内存访问中的作用,介绍了寄存器的基本概念、内存中字的存储、DS 和 [address]、字的传送、mov、add、sub 指令、数据段、栈、CPU 提供的栈机制...

    006第二章 寄存器(CPU工作原理

    6. **地址寄存器**:在内存访问过程中,地址寄存器用于保存要读取或写入的内存地址。 7. **浮点寄存器**:专门用于存储浮点数,与通用寄存器类似,但处理的是小数而非整数。 CPU的工作流程大致如下:首先,PC从...

    《汇编语言》 第2章 寄存器(CPU工作原理)

    "汇编语言第2章寄存器(CPU工作原理)" 本资源主要讲解了汇编语言中寄存器的概念和工作原理,包括通用寄存器、寄存器中的数据存储、寄存器的逻辑结构、16位结构的CPU、物理地址等概念。通过本资源,读者可以了解...

    DSP中断实现方式以及寄存器访问

    - **使用`__attribute__((section(".sectname")))`属性**:通过此属性可以将变量放在特定的内存区域中,便于直接访问寄存器。 - **使用指针操作**:定义指向寄存器地址的指针,通过该指针进行读写操作。 ##### 2. ...

    王道操作系统思维导图 第三章 内存管理

    在讨论王道操作系统思维导图第三章的内存管理时,我们将会触及操作系统中的核心概念之一——内存管理。内存管理是操作系统中负责管理计算机系统中主存储器资源的重要功能,它涉及如何有效地分配、使用和回收内存空间...

    操作系统第三章内存管理.pdf

    操作系统第三章内存管理 操作系统第三章内存管理是计算机科学中的一门重要课程,涉及到计算机系统中内存管理的各种机制和算法。本章节将详细介绍内存管理的基本概念、内存分配方式、内存保护机制、虚拟内存技术等...

    android/linux 读取寄存器值

    `devmem`工具是Linux内核提供的一种实用程序,允许用户空间程序直接访问物理内存,从而能够读写特定地址的寄存器。本文将深入探讨如何使用`devmem`来读取寄存器值,以及相关的知识点。 ### 1. `devmem`工具介绍 `...

    汇编语言_王爽(清晰)卷2

    第3章 寄存器(内存访问)  3.1 内存中字的存储  3.2 DS 31:1[address]  3.3 字的传送  3.4 ITIOV、add、sub指令  3.5 数据段  3.6 栈  3.7 CPU提供的栈机制  3.8 栈顶超界的问题  3.9 puSh、pop...

    汇编语言_王爽(清晰)卷1

    第3章 寄存器(内存访问)  3.1 内存中字的存储  3.2 DS 31:1[address]  3.3 字的传送  3.4 ITIOV、add、sub指令  3.5 数据段  3.6 栈  3.7 CPU提供的栈机制  3.8 栈顶超界的问题  3.9 puSh、pop...

    《汇编语言》第二版 王爽 中文高清扫描版115M part4 (因为太大,压缩成了6部分,解压后一个文件)

    第3章 寄存器(内存访问)  3.1 内存中字的存储  3.2 DS 31:1[address]  3.3 字的传送  3.4 ITIOV、add、sub指令  3.5 数据段  3.6 栈  3.7 CPU提供的栈机制  3.8 栈顶超界的问题  3.9 puSh、pop...

    80X86寄存器及存储器结构介绍

    - **DX(数据寄存器)**:通常用作第二个操作数寄存器,在乘法和除法指令中特别有用。 所有这些数据寄存器都可以被拆分为高8位和低8位两部分使用,例如AX可拆分为AH(高8位)和AL(低8位)。 - **指针寄存器**: ...

    汇编语言第三章作业答案

    本作业答案涵盖了汇编语言第三章的相关知识点,包括立即操作数、寄存器操作数、存储器操作数、寻址方式、物理地址计算、指令执行结果比较、段超越前缀的用法等。 1. 操作数类型 在汇编语言中,操作数可以分为三种...

    arm v8 寄存器手册

    文档还强调用户在使用此文档中的信息时不应将其用于确定实施是否侵犯第三方专利的目的。 ### 总结 ARM v8-A 架构是 ARM 处理器设计中的一个重要里程碑,通过引入 64 位计算能力和增强的安全特性,为各种高性能计算...

    win32汇编寄存器的详细说明

    ### Win32汇编寄存器的详细说明 在探讨Win32环境下汇编语言中的寄存器使用之前...而段寄存器如CS、DS、SS、ES、FS和GS则用于管理内存访问。 理解这些寄存器的功能和使用场景是编写高效、可靠的Win32汇编程序的基础。

    汇编语言(第3版) 王爽著

    第3章 寄存器(内存访问) 3.1 内存中字的存储 3.2 DS和[address] 3.3 字的传送 3.4 mov、add、sub指令 3.5 数据段 3.6 栈 3.7 CPU提供的栈机制. 3.8 栈顶超界的问题 3.9 push、pop指令 3.10 栈段 实验2 ...

    汇编语言(第3版).王爽(带详细书签)

    第3章 寄存器(内存访问) 第4章 第一个程序 第5章 [BX]和loop指令 第6章 包含多个段的程序 第7章 更灵活的定位内存地址的方法 第8章 数据处理的两个基本问题 第9章 转移指令的原理 第10章 CALL和RET指令 第...

    MCS51单片机寄存器表

    MCS51支持4组工作寄存器,每组包含8个寄存器,这里提到的是第三组。 - **10H~17H**:寄存器组2。 - **08H~0FH**:寄存器组1。 - **00H~07H**:寄存器组0。 寄存器组的选择通过程序状态字(PSW)中的RS1和RS0位进行...

    寄存器的使用与寻址方式

    3. 访问方式不同:寄存器由CPU直接读写,而存储器则通过地址总线进行寻址访问。 4. 空间大小不同:寄存器数量有限,每个寄存器通常为16位或32位,而存储器容量较大,可以扩展到数十亿字节。 8086CPU使用段地址+偏移...

    《汇编语言》第二版 王爽 中文高清扫描版115M part3 (因为太大,压缩成了6部分,解压后一个文件)

    第3章 寄存器(内存访问)  3.1 内存中字的存储  3.2 DS 31:1[address]  3.3 字的传送  3.4 ITIOV、add、sub指令  3.5 数据段  3.6 栈  3.7 CPU提供的栈机制  3.8 栈顶超界的问题  3.9 puSh、pop...

Global site tag (gtag.js) - Google Analytics