[008][汇编语言] mov [0],cs 段地址寄存器 到 内存单元

Debug 使用

(点我学习Debug的使用)

mov [0],cs 段地址寄存器 到 内存单元

mov [0],cs 段地址寄存器 到 内存单元

实验目的

  • CS寄存器 的内容 写到 内存单元

目标寄存器 CS

  • CS 寄存器的内容是 07 3F
  • CH (高位寄存器) 07
  • CL (低位寄存器)3F

目标内存单元

  • 物理地址是 1000:0H
  • 低位地址是1000:0 实验完成后,放入CL的内容,也就是3F
  • 高位地址是1000:1 实验完成后,放入CH的内容,也就是07

寄存器的高位与地位、内存单元的高地址与低地址

寄存器的高位与地位、内存单元的高地址与低地址
  • 寄存器的高位—内存单元的高地址,比如 AH(左边)— 1000:1
  • 寄存器的低位—内存单元的低地址,比如 AL(右边) — 1000:0
  • 寄存器,看左右,分高低
  • 内存,看地址大小,分高低

字节与字

  • 8位一个字节Byte, 16位一个字
  • 内存,一个内存单元就是一个字节,Byte,8位
  • 任意任意任意两个连续的内存单元,16位,组成一个
  • 8086CPU 里面的寄存器都是16位,可以存一个

试验 mov [0],cs ,段地址寄存器 到 内存单元

Debug过程 图解

第一步 A命令输入 3条 汇编指令.png

第二步 T命令 修改AX寄存器 以及 DS段寄存器的内容.png

第三步 最后一次T命令 将CS寄存器内容送到内存单元1000冒号0 里面.png

用到的 Debug 命令

  • A命令,把汇编指令写到内存单元
  • D命令,随时查看内存单元的变化
  • R命令,随时查看寄存器的变化
  • T命令,执行指令,从CS:IP指向的内存单元地址开始

用到的 寄存器 AX DS CS

  • 寄存器AX,普通寄存器,16位
AX
AH | AL
---------
10  00

AX 16位寄存器
AH 高8位寄存器  存着 10
AL 低8位寄存器  存着 00
  • 寄存器 DS CS,段地址寄存器,16位
8086CPU 从硬件设计上不支持直接将数据送入 段地址寄存器
非法语句 : mov ds,1000

只能,先把数据送入一个普通寄存器,比如 寄存器 AX
然后,再用 AX 给 DS 送数据,使用 mov DS,AX

DS CS 都是 段地址寄存器
区别在于,
DS 是与 [ ] 里面的内容结合生成一个物理地址
CS 是与 IP 里面的内容结合生成一个物理地址

如果 DS 是 1000H ,此时用到了[0]
可以看做有一个叫做 DS:[0] 的物理地址(即1000:0 H)
因此,便能指向一个具体的、特定的内存单元

用到的 汇编指令

mov ax,1000
mov ds,ax
mov [0],cs

前两条指令,完成对 DS 的正确赋值,
使得 DS 里面的内容变成 1000H
【见图解第一步以及第二步】

第三条指令,8086CPU通过计算
将 DS寄存器 里面的内容与 [ ] 里面的内容结合,
DS:[0] 得到一个具体的物理地址 1000:0 H
再根据 mov 指令,
最终就把 CS 寄存器 里面的内容 送到了 内存单元1000:0 H 里面

CS寄存器里面存着的16位数据是 073FH,
CS的高8位寄存器,CH = 07
CS的低8位寄存器,CL = 3F

高位 寄存器的内容写到 高地址 内存单元 里面
低位 寄存器的内容写到 低地址 内存单元 里面
这就是为什么 CS = 073F
用 D 命令 查看内存单元的时候,看到的是 3F 07,刚好反了
因为对于 D命令 显示的内存单元来说, 从 左 往 右 的地址是从 低 到 高
【见图解第三步】

Debug 调试汇编指令的一般化步骤

  • 一条输入,一条执行,寄存器内容自动显示在命令行窗口
    1、 Debug 命令 : A命令 【按下回车键Enter】
    2、【输入合法的汇编指令】
    3、 Debug 命令: T命令【按下回车键Enter】
    4、(Debug执行 CS:IP 指向的汇编指令,执行完后IP自动增加)


    Debug 调试汇编指令的一般化步骤
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容