【发布时间】:2016-03-11 08:54:20
【问题描述】:
我正在将一个程序从 EMU8086 环境转换为 NASM。组装 NASM 时会出现以下错误:
system\kernel.asm:14: 错误:操作码和操作数的组合无效
system\kernel.asm:20: 错误:操作码和操作数的组合无效
system\kernel.asm:28: 错误:操作码和操作数的组合无效
我的代码是:
jmp start
;==============================
;Draws a horiz and vert line
;==============================
startaddr dw 0a000h ;start of video memory
colour db 1
;==============================
start:
mov ah,00
mov al,19
int 10h ;switch to 320x200 mode
;=============================
horiz:
mov es, startaddr ;put segment address in es *** 1st ERROR HERE!
mov di, 32000 ;row 101 (320 * 100)
add di, 75 ;column 76
mov al,colour
mov cx, 160 ;loop counter
hplot:
mov es:[di],al ;set pixel to colour *** 2nd ERROR HERE!
inc di ;move to next pixel
loop hplot
vert:
mov di, 16000 ;row 51 (320 * 50)
add di, 160 ;column 161
mov cx, 100 ;loop counter
vplot:
mov es:[di],al ; *** 3rd ERROR HERE!
add di, 320 ;mov down a pixel
loop vplot
我已经用错误标记了行。为什么这在 NASM 中不起作用?
【问题讨论】:
-
mov es, [startaddr]mov al, [colour]+ 缺少hplot: -
hplot:标签并没有丢失,它只是缩进与代码不同,这使得它的可读性降低了很多。问题是loop hplot:。冒号只出现在标签 def 上,而不是引用。 -
@PeterCordes :这是正确的。我要做的一个观察是,所呈现的程序的第一个版本实际上具有
hplot:标签作为上一行注释的一部分(所以从技术上讲它是缺失的)。 OP确实转过身来解决了这个问题。我猜 Dirk 可能看到了原始代码。
标签: assembly x86 nasm x86-16 cpu-registers