求助!256色,320*200图形下画方框的程序
OOT_ROM_INIT:
push dx
push bx
push ax
CALLMAINMENU
pop ax
pop bx
pop dx
retf ;远程调用返回
MAINMENUPROCNEAR
;数据区
MOVAX,cs
MOVDS,AX
MOVES,AX
JMPCODESTART
CODESTART:
mov ax,09h
int 10h
;al,cx,si,bp为要传入的参数,bp为方框的大小
moval,35h ;color(0~255)
movcx,10 ;开始列(0-319)
movsi,10 ;开始行(0-199)
call iPCIMess
mov ax,09h
int 10h
RET
MAINMENU ENDP
;;***************************子程序*******************************
子程序的代码是用教材上的一个例子,原封不动的抄写下来的
iPCIMessprocnear
movbx,0a000h ;video的地址
moves,bx
pushax ;save color
movax,320 ;calculate start pixel
mulsi
movdi,ax ;start address of box
movdi,cx
pushax ;save starting offset
movcx,bp ;box size
BOX1:
repstosb ;drawing top line
movcx,bp
subcx,2 ;update cx
BOX2:
popdi
adddi,320 ;point to next row
pushdi
stosb ;drawing left side
adddi,bp
subdi,2
stosb ;drawing right side
loopBOX2
popdi
adddi,320 ;point to last row
movcx,bp
repstosb ;drawing bottom line
ret
iPCIMessendp
;END START
end start
运行的结果是整个屏幕为黑屏,只有按ctrl+alt+del才能推出程序,是不是我传入参数错误了?还是其他原因?希望各位大侠帮忙!
[解决办法]
- Assembly code
mov di,ax ;start address of boxmov di,cx ;这行改成add di,cxpush ax ;save starting offset
[解决办法]
这种传参方式没问题,是用寄存器传参的方式,即把子程序需要的参数放在寄存器中,子程序通过寄存器来取参数.但是你传参的bp 没有赋值啊,也就是bp 这个参数没有传过去.
另外传参也可以通过内存传参,把参数放在内存变量,栈中等,来实现传参.