256 * 240 的 directx surface
_spriteDrawAndTest proc C _pBuffer, _pSprite, _xPos, _yPos, _pStruct, _AColor
; esp + 4 +32 esp + 8 + 32 esp + 12 + 32
option prologue:none, epilogue:none
;.FPO ( 0, 6, 0, 0, 0, 0 )
pBuffer equ [esp+36]
pSprite equ [esp+40]
xPos equ [esp+44]
yPos equ [esp+48]
pStruct equ [esp+52]
AColor equ [esp+56]
movd xmm7, esp
pushad ; - N save old frame
mov ebx, yPos ; - U ebx <- yPos
mov edi, pBuffer ; - V edi <- pBuffer
shl ebx, 10 ; - U * pitch 1024
mov eax, xPos ; - V eax <- xPos
mov esi, pSprite ; - U esi <- source pointer
lea edi, [edi+eax*4] ; - V add
mov ecx, pStruct ; - U struct ;
add edi, ebx ; - V save old frame
mov ebp, [ecx+4] ; - U rect.top
mov eax, [ecx] ; - V rect.left
mov ebx, AColor ; - U BG color
mov edx, ebp ; - V save old frame
mov esp, [ecx+16] ; - U pitch
lea esi, [esi+eax*4] ; - V add esi ++ =;das
imul edx, esp ; - N
lea esi, [esi+edx*4] ; - U esi comp
sub eax, [ecx+8] ; over x
sub ebp, [ecx+12] ; over y
; esi <- tex pointer
; edi <- des pointer
; eax <- rv x
; ebp <- rv y
; ebx <- color
; esp <- rv pitch
align 16
sub edi, 4 ; - U ready to copy ... - 4
mov ecx, eax ; - V save old frame ...
sub esp, 1024 ; - U rv pitch
align 16 ; - V align is may be a jmp opd ... :)
mn_main_loop:
mov edx, [edi+esi] ; - U load source pixel
add edi, 4 ; - V add inc to addring des pixel ...
cmp edx, ebx ; - U is BG color ?
jne next_test ; - V Y ? into mnc_nesc : next_test
mnc_nesc: ; BG color
inc eax ; - U x pos addring over ?
jne mn_main_loop ; - V Y ? into starting next line
add esi, esp ; - U add pitch
mov eax, ecx ; - V recover x cnt
inc ebp ; - U y pos addring over ?
jne mn_main_loop ; - V Y ? continue : child proc ret ...
movd esp, xmm7
popad
xor eax, eax ; no clash appear
ret
align 16
next_test:; not BG color ..
mov ecx, [edi] ; - U load des buffer pixel
mov [edi], edx ; - V write buffer ...
cmp ecx, ebx ; - U test clash
je mnc_nesc ; - V N clash appear ? continue mnc_nesc ...
inc eax ; - U else into no test clash's main_loop (clash has happend ...)
jne xmn_main_loop ; - V
add esi, esp ; - U
mov eax, ecx
inc ebp ; - U
je emd_end
align 16
xmn_main_loop:
mov edx, [esi+edi] ; - U load source pixel
add edi, 4 ; - V spare
cmp edx, ebx ; - U is BG color ?
jne no_BG ; - V
inc eax
jne xmn_main_loop
add esi, esp ; - U
mov eax, ecx
inc ebp
jne xmn_main_loop
xor eax, eax
jmp emd_end
align 16
no_BG:
mov [edi], edx
lea ecx, [ecx]
inc eax
jne xmn_main_loop
add esi, esp ; - U
mov eax, ecx
inc ebp ; - V
jne xmn_main_loop
emd_end:
movd esp, xmm7
popad
mov eax, 1 ; appear clash ...
ret
_spriteDrawAndTest endp
分享到:
相关推荐
masm下载masm下载masm下载masm下载masm下载masm下载masm下载
**MASM,全称Microsoft Macro Assembler,是微软公司推出的一款高级汇编语言编译器,主要用于编写基于x86和x64架构的程序。MASM 6.15是MASM的一个版本,它支持64位指令集,使得开发者能够创建针对64位操作系统的应用...
本文将详细介绍masm615和masm5这两个汇编编译器,并探讨它们在汇编指令学习中的应用。 首先,让我们来看看masm615。MASM,全称Microsoft Macro Assembler,是微软公司开发的一个汇编器,主要用于生成IBM PC兼容机上...
**MASM6.11:微处理器汇编语言编译器的里程碑** MASM,全称为Microsoft Macro Assembler,是微软公司开发的一款汇编语言编译器,它为编写Intel架构处理器(特别是8086及其后续的x86系列)上的机器代码提供了便利。...
**MASM5与MASM615:汇编语言编程工具的里程碑** MASM,全称为Microsoft Macro Assembler,是微软公司开发的一款汇编语言编译器,它为程序员提供了编写机器代码的能力,使得程序员可以直接对计算机硬件进行精确控制...
MASM50.MASM51.MASM60.MASM611.MASM611FULL.MASM614.MASM615
相比于MASM5,MASM615增加了对32位寻址和处理的支持,同时改进了宏语言功能,增强了错误检测和调试能力。这个版本引入了新的指令集,包括保护模式下的内存管理和多任务处理,以及浮点运算指令等,适应了当时个人...
- **特点**:MASM6.11拥有良好的错误检测机制,对语法和类型检查较为严格,有助于减少编程错误。同时,它的链接器(LINK)和库管理器(LIB)也是集成的一部分,使得编译和链接过程更加便捷。 **2. MASM6.15:** -...
**MASM 510**: 在500的基础上进行了改进,增强了错误检测和诊断能力,提高了代码优化水平,同时可能添加了一些新的特性以适应当时快速发展的计算机技术。 **MASM 600**: 这个版本标志着MASM的重大升级,因为它开始...
3. **错误检查与调试**:该版本提供了更完善的错误检测机制,有助于程序员快速定位和修复问题。同时,其集成的调试工具增强了开发过程中的调试体验。 4. **代码优化**:MASM 6.15在保持代码清晰的同时,也注重代码...
【标题】"masm5.0 win32" 指的是MicroAssember System (MASM) 5.0版本在Windows 32位操作系统上的应用。MASM是一款流行的x86汇编语言编译器,由Microsoft开发,用于编写针对Intel 8086及其后续处理器的低级代码。 ...
2. **错误检查和调试工具**:Masm6.15包含错误检测机制,能帮助开发者在编写阶段发现潜在问题,同时提供调试信息,便于代码调试。 3. **兼容性**:作为微软的产品,Masm6.15与Windows操作系统高度兼容,可以方便地...
**汇编语言编程工具MASM6.15详解** MASM(Microsoft Macro Assembler)是微软公司开发的一款宏汇编器,它为程序员提供了编写低级机器代码的能力,适用于IBM PC兼容机上的Intel x86架构。MASM6.15是MASM的一个版本,...
- **良好的错误处理**: MASM6.15有良好的错误检测和报告机制,可以帮助开发者快速定位并修复问题。 **2. 汇编语言基础知识** - **指令集**: 汇编语言基于CPU的指令集,如x86指令集,包括数据处理、转移控制、输入/...
汇编语言MASM MASM 6.0是1991年推出的,支持80486处理器,它对MASM 进行重新组织,并提供了许多类似高级语言的新特点。MASM 6.0之后又有一些改进,微软又推出MASM 6.11,利用它的免费补丁程序可以升级到MASM 6.14...
**MASM(Microsoft Macro Assembler)** 是微软公司推出的一款汇编语言编译器,它在编程领域,尤其是系统级编程和低级优化中扮演着重要角色。标题中提到的"MASM安装包"指的是用于在计算机上安装MASM软件的压缩文件...
**标题解析:** "masm.rar_dos编程_masm_masm for DOS" 指的是一个关于使用MASM(Microsoft Macro Assembler)在DOS环境下进行编程的资源包。MASM是微软公司开发的一种宏汇编器,适用于创建低级语言程序,尤其是在...
2. 接着,输入`cd <你的MASM 6.15安装目录>`,例如:`cd "C:\Program Files\MASM615"`,进入MASM 6.15的根目录。 3. 输入`masm`启动MASM 6.15。现在你可以像在DOS环境下一样,编写、编译和链接汇编语言程序了。 **...