|
- .版本 2
- .支持库 spec
- .程序集 程序集1
- .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
- _临时子程序 () ' 在初始化代码执行完毕后调用测试代码
- 返回 (0) ' 可以根据您的需要返回任意数值
- .子程序 _临时子程序
- .局部变量 空字节集, 字节集
- ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
- 调试输出 (字节集_合并 ({ 123, 234 }, 空字节集))
- 调试输出 (字节集_合并 (空字节集, { 123, 234 }))
- 调试输出 (字节集_合并 ({ 123, 234 }, { }))
- 调试输出 (字节集_合并 ({ }, { 123, 234 }))
- 调试输出 (字节集_合并 ({ 1, 2, 3 }, { 4, 5 }))
- 调试输出 (字节集_合并 ({ 1, 2, 3, 4, 5 }, { 123 }))
- 调试输出 (字节集_合并 ({ }, { }))
- 调试输出 (字节集与字节型数组_合并 ({ 1, 2, 3 }, { 4, 5, 6 }))
- 调试输出 (字节型数组与字节集_合并 ({ 1, 2, 3 }, { 4, 5, 6 }))
- 调试输出 (字节型数组_合并 ({ 1, 2, 3 }, { 4, 5, 6 }))
- 输出调试文本 (“1”)
- 结束 ()
- .子程序 字节集_合并, 字节集, 公开
- .参数 字节集A, 字节集
- .参数 字节集B, 字节集
- .局部变量 返回值, 字节集
- 返回值 = 取空白字节集 (取字节集长度 (字节集A) + 取字节集长度 (字节集B))
- 置入代码 ({ 235, 54, 80, 11, 192, 117, 4, 177, 1, 235, 23, 139, 0, 11, 192, 117, 4, 177, 1, 235, 13, 139, 64, 4, 11, 192, 117, 4, 177, 1, 235, 2, 50, 201, 88, 195, 86, 82, 51, 246, 235, 7, 138, 20, 6, 136, 20, 30, 70, 59, 247, 114, 245, 90, 94, 195, 80, 83, 81, 87, 86, 87, 139, 69, 8, 232, 188, 255, 255, 255, 138, 233, 139, 69, 12, 232, 178, 255, 255, 255, 139, 93, 252, 131, 195, 8, 10, 237, 116, 8, 10, 201, 116, 4, 235, 86, 235, 84, 10, 237, 116, 20, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 232, 174, 255, 255, 255, 235, 62, 235, 60, 10, 201, 116, 20, 139, 69, 8, 139, 0, 139, 120, 4, 131, 192, 8, 232, 150, 255, 255, 255, 235, 38, 235, 36, 139, 69, 8, 139, 0, 139, 120, 4, 139, 247, 131, 192, 8, 232, 128, 255, 255, 255, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 3, 222, 232, 110, 255, 255, 255, 88, 91, 89, 90, 94, 95 })
- ' jmp MAIN
- ' IS_DATA_NULL: ;是否为空字节集 参数1(字节集指针,EAX传入,由[EBP+n]返回) (CL寄存器返回,空为1,非空为0)
- ' push eax
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax+4]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' xor cl,cl
- ' IS_DATA_NULL_END:
- ' pop eax
- ' ret
- ' COPY_RAM: ;复制内存 EAX:原地址 EBX:目标地址 EDI:长度
- ' push esi
- ' push edx
- ' xor esi,esi
- ' .while esi < edi
- ' mov dl,[eax+esi]
- ' mov [ebx+esi],dl
- ' inc esi
- ' .endw
- ' pop edx
- ' pop esi
- ' ret
- ' MAIN:
- ' push eax
- ' push ebx
- ' push ecx
- ' push edi
- ' push esi
- ' push edi
- ' mov eax,[ebp+8]
- ' call IS_DATA_NULL
- ' mov ch,cl
- ' mov eax,[ebp+12]
- ' call IS_DATA_NULL
- ' mov ebx,[ebp-4]
- ' add ebx,8
- ' .if ch && cl ;字节集AB全空
- ' jmp ASM_END
- ' .elseif ch ;字节集A空,复制B
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .elseif cl ;字节集B空,复制A
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .else ;字节集AB都不是空
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' mov esi,edi
- ' add eax,8
- ' call COPY_RAM
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' add ebx,esi
- ' call COPY_RAM
- ' .endif
- ' ASM_END:
- ' pop eax
- ' pop ebx
- ' pop ecx
- ' pop edx
- ' pop esi
- ' pop edi
- 返回 (返回值)
- .子程序 字节集与字节型数组_合并, 字节集, 公开
- .参数 字节集, 字节集
- .参数 字节型数组, 字节型, 数组
- .局部变量 返回值, 字节集
- 返回值 = 取空白字节集 (取字节集长度 (字节集) + 取数组成员数 (字节型数组))
- 置入代码 ({ 235, 54, 80, 11, 192, 117, 4, 177, 1, 235, 23, 139, 0, 11, 192, 117, 4, 177, 1, 235, 13, 139, 64, 4, 11, 192, 117, 4, 177, 1, 235, 2, 50, 201, 88, 195, 86, 82, 51, 246, 235, 7, 138, 20, 6, 136, 20, 30, 70, 59, 247, 114, 245, 90, 94, 195, 80, 83, 81, 87, 86, 87, 139, 69, 8, 232, 188, 255, 255, 255, 138, 233, 139, 69, 12, 232, 178, 255, 255, 255, 139, 93, 252, 131, 195, 8, 10, 237, 116, 8, 10, 201, 116, 4, 235, 86, 235, 84, 10, 237, 116, 20, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 232, 174, 255, 255, 255, 235, 62, 235, 60, 10, 201, 116, 20, 139, 69, 8, 139, 0, 139, 120, 4, 131, 192, 8, 232, 150, 255, 255, 255, 235, 38, 235, 36, 139, 69, 8, 139, 0, 139, 120, 4, 139, 247, 131, 192, 8, 232, 128, 255, 255, 255, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 3, 222, 232, 110, 255, 255, 255, 88, 91, 89, 90, 94, 95 })
- ' jmp MAIN
- ' IS_DATA_NULL: ;是否为空字节集 参数1(字节集指针,EAX传入,由[EBP+n]返回) (CL寄存器返回,空为1,非空为0)
- ' push eax
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax+4]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' xor cl,cl
- ' IS_DATA_NULL_END:
- ' pop eax
- ' ret
- ' COPY_RAM: ;复制内存 EAX:原地址 EBX:目标地址 EDI:长度
- ' push esi
- ' push edx
- ' xor esi,esi
- ' .while esi < edi
- ' mov dl,[eax+esi]
- ' mov [ebx+esi],dl
- ' inc esi
- ' .endw
- ' pop edx
- ' pop esi
- ' ret
- ' MAIN:
- ' push eax
- ' push ebx
- ' push ecx
- ' push edi
- ' push esi
- ' push edi
- ' mov eax,[ebp+8]
- ' call IS_DATA_NULL
- ' mov ch,cl
- ' mov eax,[ebp+12]
- ' call IS_DATA_NULL
- ' mov ebx,[ebp-4]
- ' add ebx,8
- ' .if ch && cl ;字节集AB全空
- ' jmp ASM_END
- ' .elseif ch ;字节集A空,复制B
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .elseif cl ;字节集B空,复制A
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .else ;字节集AB都不是空
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' mov esi,edi
- ' add eax,8
- ' call COPY_RAM
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' add ebx,esi
- ' call COPY_RAM
- ' .endif
- ' ASM_END:
- ' pop eax
- ' pop ebx
- ' pop ecx
- ' pop edx
- ' pop esi
- ' pop edi
- 返回 (返回值)
- .子程序 字节型数组与字节集_合并, 字节集, 公开
- .参数 字节型数组, 字节型, 数组
- .参数 字节集, 字节集
- .局部变量 返回值, 字节集
- 返回值 = 取空白字节集 (取数组成员数 (字节型数组) + 取字节集长度 (字节集))
- 置入代码 ({ 235, 54, 80, 11, 192, 117, 4, 177, 1, 235, 23, 139, 0, 11, 192, 117, 4, 177, 1, 235, 13, 139, 64, 4, 11, 192, 117, 4, 177, 1, 235, 2, 50, 201, 88, 195, 86, 82, 51, 246, 235, 7, 138, 20, 6, 136, 20, 30, 70, 59, 247, 114, 245, 90, 94, 195, 80, 83, 81, 87, 86, 87, 139, 69, 8, 232, 188, 255, 255, 255, 138, 233, 139, 69, 12, 232, 178, 255, 255, 255, 139, 93, 252, 131, 195, 8, 10, 237, 116, 8, 10, 201, 116, 4, 235, 86, 235, 84, 10, 237, 116, 20, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 232, 174, 255, 255, 255, 235, 62, 235, 60, 10, 201, 116, 20, 139, 69, 8, 139, 0, 139, 120, 4, 131, 192, 8, 232, 150, 255, 255, 255, 235, 38, 235, 36, 139, 69, 8, 139, 0, 139, 120, 4, 139, 247, 131, 192, 8, 232, 128, 255, 255, 255, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 3, 222, 232, 110, 255, 255, 255, 88, 91, 89, 90, 94, 95 })
- ' jmp MAIN
- ' IS_DATA_NULL: ;是否为空字节集 参数1(字节集指针,EAX传入,由[EBP+n]返回) (CL寄存器返回,空为1,非空为0)
- ' push eax
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax+4]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' xor cl,cl
- ' IS_DATA_NULL_END:
- ' pop eax
- ' ret
- ' COPY_RAM: ;复制内存 EAX:原地址 EBX:目标地址 EDI:长度
- ' push esi
- ' push edx
- ' xor esi,esi
- ' .while esi < edi
- ' mov dl,[eax+esi]
- ' mov [ebx+esi],dl
- ' inc esi
- ' .endw
- ' pop edx
- ' pop esi
- ' ret
- ' MAIN:
- ' push eax
- ' push ebx
- ' push ecx
- ' push edi
- ' push esi
- ' push edi
- ' mov eax,[ebp+8]
- ' call IS_DATA_NULL
- ' mov ch,cl
- ' mov eax,[ebp+12]
- ' call IS_DATA_NULL
- ' mov ebx,[ebp-4]
- ' add ebx,8
- ' .if ch && cl ;字节集AB全空
- ' jmp ASM_END
- ' .elseif ch ;字节集A空,复制B
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .elseif cl ;字节集B空,复制A
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .else ;字节集AB都不是空
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' mov esi,edi
- ' add eax,8
- ' call COPY_RAM
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' add ebx,esi
- ' call COPY_RAM
- ' .endif
- ' ASM_END:
- ' pop eax
- ' pop ebx
- ' pop ecx
- ' pop edx
- ' pop esi
- ' pop edi
- 返回 (返回值)
- .子程序 字节型数组_合并, 字节集, 公开
- .参数 字节型数组A, 字节型, 数组
- .参数 字节型数组B, 字节型, 数组
- .局部变量 返回值, 字节集
- 返回值 = 取空白字节集 (取数组成员数 (字节型数组A) + 取数组成员数 (字节型数组B))
- 置入代码 ({ 235, 54, 80, 11, 192, 117, 4, 177, 1, 235, 23, 139, 0, 11, 192, 117, 4, 177, 1, 235, 13, 139, 64, 4, 11, 192, 117, 4, 177, 1, 235, 2, 50, 201, 88, 195, 86, 82, 51, 246, 235, 7, 138, 20, 6, 136, 20, 30, 70, 59, 247, 114, 245, 90, 94, 195, 80, 83, 81, 87, 86, 87, 139, 69, 8, 232, 188, 255, 255, 255, 138, 233, 139, 69, 12, 232, 178, 255, 255, 255, 139, 93, 252, 131, 195, 8, 10, 237, 116, 8, 10, 201, 116, 4, 235, 86, 235, 84, 10, 237, 116, 20, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 232, 174, 255, 255, 255, 235, 62, 235, 60, 10, 201, 116, 20, 139, 69, 8, 139, 0, 139, 120, 4, 131, 192, 8, 232, 150, 255, 255, 255, 235, 38, 235, 36, 139, 69, 8, 139, 0, 139, 120, 4, 139, 247, 131, 192, 8, 232, 128, 255, 255, 255, 139, 69, 12, 139, 0, 139, 120, 4, 131, 192, 8, 3, 222, 232, 110, 255, 255, 255, 88, 91, 89, 90, 94, 95 })
- ' jmp MAIN
- ' IS_DATA_NULL: ;是否为空字节集 参数1(字节集指针,EAX传入,由[EBP+n]返回) (CL寄存器返回,空为1,非空为0)
- ' push eax
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' mov eax,[eax+4]
- ' .if eax == 0
- ' mov cl,1
- ' jmp IS_DATA_NULL_END
- ' .endif
- ' xor cl,cl
- ' IS_DATA_NULL_END:
- ' pop eax
- ' ret
- ' COPY_RAM: ;复制内存 EAX:原地址 EBX:目标地址 EDI:长度
- ' push esi
- ' push edx
- ' xor esi,esi
- ' .while esi < edi
- ' mov dl,[eax+esi]
- ' mov [ebx+esi],dl
- ' inc esi
- ' .endw
- ' pop edx
- ' pop esi
- ' ret
- ' MAIN:
- ' push eax
- ' push ebx
- ' push ecx
- ' push edi
- ' push esi
- ' push edi
- ' mov eax,[ebp+8]
- ' call IS_DATA_NULL
- ' mov ch,cl
- ' mov eax,[ebp+12]
- ' call IS_DATA_NULL
- ' mov ebx,[ebp-4]
- ' add ebx,8
- ' .if ch && cl ;字节集AB全空
- ' jmp ASM_END
- ' .elseif ch ;字节集A空,复制B
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .elseif cl ;字节集B空,复制A
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' call COPY_RAM
- ' jmp ASM_END
- ' .else ;字节集AB都不是空
- ' mov eax,[ebp+8]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' mov esi,edi
- ' add eax,8
- ' call COPY_RAM
- ' mov eax,[ebp+12]
- ' mov eax,[eax]
- ' mov edi,[eax+4]
- ' add eax,8
- ' add ebx,esi
- ' call COPY_RAM
- ' .endif
- ' ASM_END:
- ' pop eax
- ' pop ebx
- ' pop ecx
- ' pop edx
- ' pop esi
- ' pop edi
- 返回 (返回值)
复制代码 |
|