下面的代碼編譯和運行正常上的Xubuntu 16.04與 在bash的這些命令殼16位x86彙編程序,使用8位內存存儲變量繪製藍色到屏幕的顏色問題?
nasm blue.asm -fbin -oblue.com
dosbox ./blue.com -exit
時遇到的問題是在線路20 mov al, 1;byte [blue]
如果我用這個代替 mov al, byte [blue]
程序在屏幕上繪製一種勃艮第而不是藍色。它工作正常使用這是在8位調色板這裏https://en.wikipedia.org/wiki/BIOS_color_attributes
顏色代碼下面是完整的代碼,隨時讓我知道,如果真有別的毛病雖然。
org 00h
bits 16
section .data
blue: db 1
section .text
MAIN:
AsyncKeyInput:
mov al, 13h
int 10h
; Segment a000h
mov ax, 0a000h
mov es, ax
; Offset 0
xor di, di
mov al, 1;byte [blue]
; Looplength (320*200)/2 = 7d00
mov cx, 7d00h
hplot:
mov [ es: di], al ;set pixel to colour
inc di ;move to next pixel
loop hplot
mov ah, 1 ;Get the State of the keyboard buffer
int 16h ;key press
jz AsyncKeyInput ;if not zero then exit the program
;exit program
mov eax, 1
mov ebx, 0
int 0x80
ret
'org 00' or'org 0x100'? 'int 0x80'是一個退出系統調用而不是DOS退出,一個COM程序應該只用'ret' –
我認爲它是'org 00',但這是默認的權利?所以不需要甚至宣佈它?它應該是'0x100'嗎?有什麼區別,它的堆棧大小正確嗎? – pandoragami
DOS COM程序在偏移量0x100處。 –