当前位置: 代码迷 >> 汇编语言 >> 用汇编绘制三角形,定义数组的疑惑。该怎么解决
  详细解决方案

用汇编绘制三角形,定义数组的疑惑。该怎么解决

热度:4715   发布时间:2013-02-26 00:00:00.0
用汇编绘制三角形,定义数组的疑惑。
我用它绘制了直线,    
invoke   MoveToEx,hdc,10,10,NULL
invoke   LineTo,hdc,500,300
效果非常好。
我想画可以填充颜色的多边形,可是对于polygon中的数组非常头疼。
=================================
在定义这个之后:
dwPointArray dd 6   dup   (?)
dwPointConst dd 10,90,70,150,75,105
----------
???中间这一段代码很头疼
-----------
lea传递地址后,使用这个之前:
invoke SetPolyFillMode,_hDC,WINDING
invoke Polygon,_hDC,addr   dwPointArray,3

=====================
如何用一两句简单的命令将所有数组的值传递给dwPointArray,使它正常使用呢?
请高人指点!谢谢。


------解决方案--------------------------------------------------------
多单元数据的传送, 比较简单的就是 rep movsd 了:
mov esi, offset dwPointConst
mov edi, offset dwPointArray
mov ecx, 6
rep movsd
------解决方案--------------------------------------------------------
看下面的这段代码, 应该是将原来各点的 .y 坐标增加了 70, 所以, 下面的这段代码应该是在 rep movsd 之后
------解决方案--------------------------------------------------------
看是要置为哪个点了. 如果是固定的, 可以通过个预置常量来进行, 比如 i:
mov esi, offset dwPointArray[i*8]
push pt.x
pop [esi]
push pt.y
pop [esi][4]
如果这个点不是固定的, 可以用个变量比如 eax 来存放是第几个点, 这样就是:
lea esi, dwPointArray[eax*8]
push pt.x
pop [esi]
push pt.y
pop [esi][4]

上面的 i/eax 都是以 0 为基, 即首个点的序号为 0
  相关解决方案