【问题标题】:can "mov ds,ax " be used to transfer 8bit data?“mov ds,ax”可以用来传输8位数据吗?
【发布时间】:2014-03-25 20:36:34
【问题描述】:

我正在研究作者GODSE的mp书。 我的问题:

A) AX,BX,CX,DX 16bit 寄存器可以用作传输“8bit”数据的源吗? 例如:移动 [734AH],BX;将 bx 的“内容”复制到 ds。 这里,内容是什么意思?

  • 数据或字
  • 只有一个字?

Ex2: 移动 DS,BX;将“word”从 bx 复制到 ds。 为什么他们提到了单词本身? (如果还可以传输 1 字节数据,它们本身就会给出“内容”。)。

【问题讨论】:

标签: assembly


【解决方案1】:

A) AX,BX,CX,DX 16bit 寄存器可以用作传输“8bit”数据的源吗?

不完全是。但是,您可以使用AL 作为传输8 位数据的源(特别是AX 的低8 位)。 AX 本身包含 16 位,如果您将其用作 MOV 指令的源,则所有这些位都会被传输。

例如:Mov [734AH],BX;将 bx 的“内容”复制到 ds。在这里,内容是什么意思? a) 数据或单词 b) 只有单词?

“内容”就是 BX 的内容。其 16 位的值。它们被转移到给定的内存地址。

Ex2: 移动 DS,BX;将“word”从 bx 复制到 ds。为什么他们提到了单词本身?

听起来您对“单词”的含义感到困惑。 word 是一个数据单元。引用维基百科:

字基本上是一组固定大小的数字(二进制​​或十进制),由指令集或处理器硬件作为一个单元处理。

【讨论】:

  • 我认为令人困惑的是x86使用MOV助记符从内存加载,存储到内存,在DS的情况下加载段寄存器,以及MOV的其他用途哈哈.所以需要澄清MOV DS正在加载一个段寄存器不存储到内存中。
  • 我读到这个词是一组16bis。他们可以在示例 2 中将其注释为“ax 的内容”。是他们说的话?建议我确切的答案。 “mov ds,ax”可以用于8bit传输吗?
  • DS 的大小也是 16 位 - 与 AX 相同。在 Intel x86 世界中,“word”表示“16 位”。即使在谈论具有 32 位和 64 位寄存器的较新 CPU 时也是如此。
  • 我们可以使用“mov ds,ax”复制8位数据吗? A)是 B)不是。
  • @SHARVARI 我认为 DS 和 AX 都是 16 位寄存器,因此 mov ds, ax 复制了 16 位数据,这一点已经得到了相当彻底的解释。
【解决方案2】:

在实模式下;你可以在段寄存器中存储你喜欢的任何值(例如ds),只要你不使用不需要的值作为内存引用。例如,像mov [foo],ax 这样的指令使用ds 作为其隐含的段寄存器,如果您忘记了这一点并将ds 设置为任意值,您的代码将会中断。

在保护模式和长模式下;段寄存器加载涉及保护/完整性检查,您不能在段寄存器中存储任意值。对于大多数操作系统(使用分页但不使用分段),您可能只能将 2 个值加载到像 ds 这样的数据段寄存器中 - 当您的进程启动时它已经包含的值为零。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2015-01-25
    • 2015-11-27
    相关资源
    最近更新 更多