【问题标题】:How can I feed bytes to video memory from another location in 16 bit assembly?如何在 16 位汇编中从另一个位置向视频内存提供字节?
【发布时间】:2012-08-12 09:23:48
【问题描述】:

我已将特定数据存储在内存位置 0x4000。我想将一个字节从那里传递到内存位置 0xb800 以便将数据打印在屏幕上。当我尝试将我假设在 0x4000:0 中的第一个字节存储在 0xb800:0 中时,就会出现问题。我用作示例的代码如下:

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

这编译得很好并且运行完美,但我正在尝试适应的内容会在 NASM 上引发“invalid segment override”错误。这是我的非工作代码:

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

是否可以使用 ES 段从 0x4000:[offset] 获取单个字节并将其馈送到 0xb800:[offset] ?如果有,怎么做?

【问题讨论】:

    标签: assembly x86 16-bit


    【解决方案1】:

    你可以做到这一点,但你不能像你一样在一条指令中做到这一点。您需要使用另一个段寄存器,例如ds,以及一个中间寄存器(此处为al):

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

    请注意,如果您将 ds 指向其他地方,那么您也会考虑这一点(例如通过保存和恢复它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 2017-04-03
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多