我在Windows上的DOSBOX中使用程序集8086。 我试图打印一个特定的"对象"到我的屏幕,但它没有工作。 我打印一个16X16 var,例如:
pic1 db 4,4,0,0,0,0,0,4,4,0,0,0,0,0,4,4 ;** ** **│
db 0,4,0,0,0,4,4,4,4,4,4,0,0,0,4,0 ; * ****** * │
db 0,4,4,0,0,4,4,4,4,4,4,0,0,4,4,0 ; ** ****** ** │
db 0,4,4,0,0,0,0,4,4,0,0,0,0,4,4,0 ; ** ** ** │
db 0,4,4,0,0,0,0,4,4,0,0,0,0,4,4,0 ; ** ** ** │
db 0,0,0,4,4,4,0,4,4,0,4,4,4,0,0,0 ; *** ** *** │
db 0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,0 ; **** │
db 0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0 ; ****** │
db 0,0,0,0,4,4,0,0,0,0,4,4,0,0,0,0 ; ** ** │
db 0,0,0,4,4,0,0,0,0,0,0,4,4,0,0,0 ; ** ** │
db 0,0,0,4,4,0,0,0,0,0,0,4,4,0,0,0 ; ** ** │
db 0,0,0,4,4,0,0,0,0,0,0,4,4,0,0,0 ; ** ** │
db 0,0,0,0,4,4,0,0,0,0,4,4,0,0,0,0 ; ** ** │
db 0,0,4,4,4,4,0,0,0,0,4,4,4,4,0,0 ; **** **** │
db 0,0,4,4,4,4,0,0,0,0,4,4,4,4,0,0 ; **** **** │
db 0,0,4,4,4,4,0,0,0,0,4,4,4,4,0,0 ; **** **** │
我的打印代码如下:
IDEAL
MODEL small
STACK 100h
DATASEG
include 'pic1.asm'
; --------------------------
; Your variables here
; --------------------------
positionX dw 1
positionY dw 1
color db ?
;--------------------------------------
CODESEG
; --------------------------
; Your code here - Procedures
; --------------------------
;---------------------------
proc print
push cx bx
mov bh,0
mov cx,[positionX]
mov dx,[positionY]
mov al,[color]
mov ah,0ch ; the print
int 10h
pop bx cx
ret
endp print
;---------------------------
start:
mov ax, 13h ;graphics mode
int 10h
mov si, offset pic1
xor bx,bx
mov cx,16d
Print_line_ofx:
mov al, [si+bx]
mov [color], al
call print
add bx,1
add [positionX],1
loop Print_line_ofx
mov cx,16d
mov [positionX],1
add [positionY],1
cmp [positionY],16d
jne Print_line_ofx
; Wait for key press
mov ah, 0h
int 16h
; Return to text mode
mov ah, 0
mov al, 2
int 10h
exit:
mov ax, 4c00h
int 21h
END start
它甚至不打印一个像素!
我知道我不擅长汇编程序,有人可以帮助我并修改我的代码,以便将我的var打印到我的屏幕上吗?