首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

!256色,320*200图形下画方框的程序

2012-02-21 
求助!256色,320*200图形下画方框的程序OOT_ROM_INIT:push dxpush bxpush axCALLMAINMENUpop axpop bxpop d

求助!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 这个参数没有传过去.
另外传参也可以通过内存传参,把参数放在内存变量,栈中等,来实现传参.

热点排行