以下代码在 Xubuntu 16.04 上编译并运行正常 这些命令位于 bash shell
中 nasm blue.asm -fbin -oblue.com
dosbox ./blue.com -exit
我遇到的问题是在第20行
mov al, 1;byte [blue]
如果我改用它
mov al, byte [blue]
该程序在屏幕上绘制了一种勃艮第而不是蓝色。它通常用于使用 1 ,这是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
答案 0 :(得分:2)
问题的解决方案是为com程序正确设置程序段前缀为org 100h
。以下是更正后的代码。
org 100h
bits 16
section .data
blue: db 1h
section .text
MAIN:
AsyncKeyInput:
mov al, 13h
int 10h
; Segment a000h
mov ax, 0a000h
mov es, ax
; Offset 0
xor di, di
xor eax, eax
mov al, 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
;text mode
mov ax, 0003h
int 10h
ret