使用 LODS 指令在实模式下输出字符串

String Output in Real-Mode by using LODS instruction

我需要写一个函数,在实模式下输出一个字符串。 有那个代码:

;; ds:si - string address, cx - length of string
   cld
putc:
   lods
   mov ah, 0x0E
   xor bh, bh    
   int 0x10          ;; display character, advancing cursor and scrolling screen
                     ;; as necessary
   loop putc

但它只输出第一个字符几次(由CX寄存器定义),a.e。 SI 寄存器不增加。 是哪里出错了?

lods 不是有效的指令助记符;你可能是说 lodsb.

在我的汇编程序 (nasm) 上,不是有效助记符的标记被解析为标签,因此不会发出任何代码。因此,您的 lods 实际上是 no-op,所以难怪 SI 不会递增。 (不过,汇编器确实会发出警告,你的呢?)