可以用“mov ds,ax”来传输8位数据吗?

时间:2014-03-25 20:36:35

标签: assembly

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

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

  • 数据或单词
  • 只有字?

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

2 个答案:

答案 0 :(得分:1)

  

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

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

  

Ex:Mov [734AH],BX;副本"内容" bx到ds。这里的内容是什么意思? a)数据或单词b)只有单词?

"内容"只是 - BX的内容。其16位的值。它们被转移到给定的存储器地址。

  

Ex2:Mov DS,BX;副本"字"从bx到ds。为什么他们自己提到了这个词?

听起来你对#34;字的含义感到困惑。" word是一个数据单位。引用维基百科:

  

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

答案 1 :(得分:1)

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

在保护模式和长模式下;在段寄存器加载中涉及保护/健全性检查,并且您不能在段寄存器中存储任意值。对于大多数操作系统(使用分页而不使用分段),可能只有2个值可以加载到数据段寄存器中,如ds - 它在您的进程中已包含的值开始了,零。