• 汇编语言——寄存器(内存访问 ds数据段寄存器)


    在内存中字的存储

    这段话的主要意思是:一个字=2B=16bit,CPU中是用两个内存单元储存一个字(假如获取0地址存放的字型数据,就是获取它的高位字节0+1位低位字节0位的数据,数据由高地址位向低地址位读)

    问题:

    (1)0地址单元中存放的字节型数据是多少?  #  20H
    (2)0地址字单元中存放的字型数据是多少?  # 4e20H
    (3)2地址字单元中存放的字节型数据是多少? # 12H
    (4)2地址单元中存放的字型数据是多少?      #  0012H
    (5)1地址字单元中存放的字型数据是多少?  # 12aEH

    结论:就是我上面说的,字型数据就是它和它的下一位地址单元的数据(数据由高地址位向低地址位读)

    数据段寄存器DS和偏移量[address]

    用法和cs和ip差不多,都是段寄存器的值*16+偏移量的值

    为给DS数据段寄存器值

    因为CPU的段寄存器都比较害羞,没法给他们直接赋值(cs代码寄存器用的是jmp cs:ip),所以段寄存器采用以下方法赋值

    mov ax,1234H    # 将ax寄存器赋值为1234H
    
    mov ds,ax    # 通过ax寄存器 间接赋值

    字的传送

    mov ax,[1]    # []中的是偏移量 意思是将12341内存位置的字形数据赋给ax寄存器
    
    mov al,[1]    # 将12341内存位置的字节形数据赋给al(低位)寄存器
    
    mov  [1],ax    # 将ax寄存器字形数据赋给12341内存位置的值
    
    mov [1],al    # 将al寄存器的字节形数据赋给12341内存位置
    

    问题1:

    内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值?

    解析:

    问题2:

    内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值?

    解析:

    NB的move指令

    mov 通用寄存器,数据		# mov ax,1234H
    mov 通用寄存器,寄存器		# mov bx,ax / mov bx,ds(将段寄存器的值赋给通用寄存器)
    mov 段寄存器,寄存器		# mov ds,ax(因为无法直接给段寄存器赋值,所以用通用寄存器当中介)
    mov 内存单元,寄存器		# mov [0],ax(将ax寄存器中的值赋给ds*16+0这个内存单元)
    mov 内存单元,寄存器		# mov ax,[0](内存单元ds*16+0的值赋给ax寄存器)
    

    sub,add指令

    数据段

    我们上面操作的实际上就是数据段,具体来看下是怎样操作数据段的

    累加123B0H~123BAH的内存单元的操作

    小结:

    (1)字在内存中存储时 ,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放再高地址单元中。
    (2)用 mov 指令要访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
    (3)[address]表示一个偏移地址为address的内存单元。
    (4)在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应。
    (5)mov、add、sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令。

    (2) 内存中的情况如图3.6所示

    各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;

    ①   写出CPU执行的指令序列(用汇编指令写出)。

    ②   写出CPU执行每条指令后,CS、IP和相关寄存器的数值。

    ③   再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?

    答案:我以为jmp了以后cp的值也会改变,实际上就是它jmp的内个CP:IP

    指令序列

    CS

    IP

    DS

    AX

    BX

    初始值

    2000h

    0

    0

    0

    0

    1

    mov ax,6622h

    2000h

    3h

    0

    6622h

    0

    2

    jmp 0ff0:0100

    ff0h

    100h

    0

    6622h

    0

    3

    mov ax,2000h

    ff0h

    103h

    0

    2000h

    0

    4

    mov ds,ax

    ff0h

    105h

    2000h

    2000h

    0

    5

    mov ax,[8]

    ff0h

    108h

    2000h

    c389h

    0

    6

    mov ax,[2]

    ff0h

    10bh

    2000h

    ea66h

    0

  • 相关阅读:
    剑指offer-第二章排序之年龄排序
    剑指offer—第二章算法之快速排序
    java小程序(课堂作业02)
    关于java的一些小知识(课程作业01)
    Java从命令行接受多个数字并求和
    《大道至简》第一章读后感及伪代码
    大道至简读后感
    GCPC 2013_A Boggle DFS+字典树 CSU 1457
    Aizu 2155 Magic Slayer 背包DP
    UVALive 4255 Guess
  • 原文地址:https://www.cnblogs.com/x54256/p/8082595.html
Copyright © 2020-2023  润新知