2012-08-16 14 views
1

我已将特定数据存储在内存位置0x4000。我想从那里传递一个字节到内存位置0xb800,以便数据打印在屏幕上。当我尝试存储在0xb800:0时,会出现问题我将假设的第一个字节是0x4000:0。我作为例子的代码如下:如何将字节从16位程序集中的其他位置传送到视频内存?

mov ax, 0xb800 
mov es, ax 
mov byte [es:0], 'A' 

编译没有问题,运行完美,但我正在努力适应在NASM抛出“无效段重载”的错误。这里是我的非工作代码:

mov ax, 0xb800 
mov es, ax 
mov byte [es:0], byte [0x4000:0] 

是否有可能得到0x4000的单字节:[偏移]和饲料它0xb800:使用ES段[偏移]?如果是这样,怎么样?

回答

1

你可以做到这一点,但你不能像你一样用一条指令来做到这一点。你需要使用其他段寄存器,如ds,加上中间寄存器(al这里):

mov ax, 0x4000 
mov ds, ax 
mov ax, 0xb800 
mov es, ax 
mov al, [ds:0] 
mov [es:0], al 

请注意,如果你已经有了ds指出别的地方,那么你就必须考虑到太(如通过保存和恢复它)。

+0

谢谢!它工作完美。 – NorthStyling 2012-08-16 03:29:11

相关问题