我正在將程序從EMU8086環境轉換爲NASM。當裝配NASM給出了這些錯誤:使用ES寄存器給出錯誤
system\kernel.asm:14: error: invalid combination of opcode and operands
system\kernel.asm:20: error: invalid combination of opcode and operands
system\kernel.asm:28: error: invalid combination of opcode and operands
我的代碼是:
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,[color]'+ missing'hplot:' –
'hplot:'標籤沒有丟失,它只是不與代碼的縮進方式不同,使得它的可讀性大大降低。問題是'loop hplot:'。冒號只在標籤def上,而不是引用。 –
@PeterCordes:這是正確的。我會做的一個觀察是,該程序的第一個版本實際上具有'hplot:'標籤,作爲上述評論的一部分(因此在技術上缺失)。 OP確實轉身解決了這個問題。我猜測德克可能看到了原始代碼。 –