设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 574|回复: 0
收起左侧

易语言MASM置入代码实现逻辑型数组的归约运算:与,或,与非,或非,异或,同或(返回逻辑型)

[复制链接]
发表于 2022-11-12 15:20:10 | 显示全部楼层 |阅读模式
1.png
  1. .版本 2
  2. .支持库 spec

  3. .程序集 程序集1

  4. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  5. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  6. 返回 (0)  ' 可以根据您的需要返回任意数值

  7. .子程序 _临时子程序
  8. .局部变量 A, 逻辑型, , "0"

  9. A = { 真, 真, 真, 真, 真 }
  10. 调试输出 (逻辑型数组_归约与 (A))
  11. 调试输出 (逻辑型数组_归约与非 (A))
  12. 调试输出 (逻辑型数组_归约或 (A))
  13. 调试输出 (逻辑型数组_归约或非 (A))
  14. 调试输出 (逻辑型数组_归约异或 (A))
  15. 调试输出 (逻辑型数组_归约同或 (A))


  16. .子程序 逻辑型数组_归约与, 逻辑型, 公开, 所有成员为真返回真,否则返回假
  17. .参数 逻辑型数组, 逻辑型, 数组, 空成员返回假

  18. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 47, 139, 0, 11, 192, 117, 2, 235, 39, 139, 80, 4, 11, 210, 117, 4, 51, 192, 235, 28, 131, 192, 8, 51, 219, 235, 12, 139, 12, 152, 11, 201, 117, 4, 51, 192, 235, 10, 67, 59, 218, 114, 240, 184, 1, 0, 0, 0, 90, 89, 91, 201, 194, 4, 0 })
  19. ' push ebx
  20. ' push ecx
  21. ' push edx
  22. ' mov eax,[ebp+8]
  23. ' .if !eax
  24. ' jmp ASM_END
  25. ' .endif
  26. ' mov eax,[eax]
  27. ' .if !eax
  28. ' jmp ASM_END
  29. ' .endif
  30. ' mov edx,[eax+4]
  31. ' .if !edx
  32. ' xor eax,eax
  33. ' jmp ASM_END
  34. ' .endif
  35. ' add eax,8
  36. ' xor ebx,ebx
  37. ' .while ebx < edx
  38. ' mov ecx,[eax+ebx*4]
  39. ' .if ecx == 0
  40. ' xor eax,eax
  41. ' jmp ASM_END
  42. ' .endif
  43. ' inc ebx
  44. ' .endw
  45. ' mov eax,1
  46. ' ASM_END:
  47. ' pop edx
  48. ' pop ecx
  49. ' pop ebx
  50. ' leave
  51. ' retn 4

  52. 返回 (假)

  53. .子程序 逻辑型数组_归约与非, 逻辑型, 公开, 所有成员为真返回假,否则返回真
  54. .参数 逻辑型数组, 逻辑型, 数组, 空成员返回假

  55. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 47, 139, 0, 11, 192, 117, 2, 235, 39, 139, 80, 4, 11, 210, 117, 4, 51, 192, 235, 28, 131, 192, 8, 51, 219, 235, 15, 139, 12, 152, 11, 201, 117, 7, 184, 1, 0, 0, 0, 235, 7, 67, 59, 218, 114, 237, 51, 192, 90, 89, 91, 201, 194, 4, 0 })
  56. ' push ebx
  57. ' push ecx
  58. ' push edx
  59. ' mov eax,[ebp+8]
  60. ' .if !eax
  61. ' jmp ASM_END
  62. ' .endif
  63. ' mov eax,[eax]
  64. ' .if !eax
  65. ' jmp ASM_END
  66. ' .endif
  67. ' mov edx,[eax+4]
  68. ' .if !edx
  69. ' xor eax,eax
  70. ' jmp ASM_END
  71. ' .endif
  72. ' add eax,8
  73. ' xor ebx,ebx
  74. ' .while ebx < edx
  75. ' mov ecx,[eax+ebx*4]
  76. ' .if ecx == 0
  77. ' mov eax,1
  78. ' jmp ASM_END
  79. ' .endif
  80. ' inc ebx
  81. ' .endw
  82. ' xor eax,eax
  83. ' ASM_END:
  84. ' pop edx
  85. ' pop ecx
  86. ' pop ebx
  87. ' leave
  88. ' retn 4

  89. 返回 (假)

  90. .子程序 逻辑型数组_归约或, 逻辑型, 公开, 所有成员为假返回假,否则返回真
  91. .参数 逻辑型数组, 逻辑型, 数组, 空成员返回假

  92. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 48, 139, 0, 11, 192, 117, 2, 235, 40, 139, 80, 4, 11, 210, 117, 4, 51, 192, 235, 29, 131, 192, 8, 51, 219, 235, 16, 139, 12, 152, 131, 249, 1, 117, 7, 184, 1, 0, 0, 0, 235, 7, 67, 59, 218, 114, 236, 51, 192, 90, 89, 91, 201, 194, 4, 0 })
  93. ' push ebx
  94. ' push ecx
  95. ' push edx
  96. ' mov eax,[ebp+8]
  97. ' .if !eax
  98. ' jmp ASM_END
  99. ' .endif
  100. ' mov eax,[eax]
  101. ' .if !eax
  102. ' jmp ASM_END
  103. ' .endif
  104. ' mov edx,[eax+4]
  105. ' .if !edx
  106. ' xor eax,eax
  107. ' jmp ASM_END
  108. ' .endif
  109. ' add eax,8
  110. ' xor ebx,ebx
  111. ' .while ebx < edx
  112. ' mov ecx,[eax+ebx*4]
  113. ' .if ecx == 1
  114. ' mov eax,1
  115. ' jmp ASM_END
  116. ' .endif
  117. ' inc ebx
  118. ' .endw
  119. ' xor eax,eax
  120. ' ASM_END:
  121. ' pop edx
  122. ' pop ecx
  123. ' pop ebx
  124. ' leave
  125. ' retn 4

  126. 返回 (假)

  127. .子程序 逻辑型数组_归约或非, 逻辑型, 公开, 所有成员为假返回真,否则返回假
  128. .参数 逻辑型数组, 逻辑型, 数组, 空成员返回假

  129. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 48, 139, 0, 11, 192, 117, 2, 235, 40, 139, 80, 4, 11, 210, 117, 4, 51, 192, 235, 29, 131, 192, 8, 51, 219, 235, 13, 139, 12, 152, 131, 249, 1, 117, 4, 51, 192, 235, 10, 67, 59, 218, 114, 239, 184, 1, 0, 0, 0, 90, 89, 91, 201, 194, 4, 0 })
  130. ' push ebx
  131. ' push ecx
  132. ' push edx
  133. ' mov eax,[ebp+8]
  134. ' .if !eax
  135. ' jmp ASM_END
  136. ' .endif
  137. ' mov eax,[eax]
  138. ' .if !eax
  139. ' jmp ASM_END
  140. ' .endif
  141. ' mov edx,[eax+4]
  142. ' .if !edx
  143. ' xor eax,eax
  144. ' jmp ASM_END
  145. ' .endif
  146. ' add eax,8
  147. ' xor ebx,ebx
  148. ' .while ebx < edx
  149. ' mov ecx,[eax+ebx*4]
  150. ' .if ecx == 1
  151. ' xor eax,eax
  152. ' jmp ASM_END
  153. ' .endif
  154. ' inc ebx
  155. ' .endw
  156. ' mov eax,1
  157. ' ASM_END:
  158. ' pop edx
  159. ' pop ecx
  160. ' pop ebx
  161. ' leave
  162. ' retn 4

  163. 返回 (假)

  164. .子程序 逻辑型数组_归约异或, 逻辑型, 公开, 真的数量为奇数返回真,否则返回假
  165. .参数 逻辑型数组, 逻辑型, 数组, 空成员返回假

  166. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 38, 139, 0, 11, 192, 117, 2, 235, 30, 139, 80, 4, 11, 210, 117, 4, 51, 192, 235, 19, 131, 192, 8, 51, 219, 51, 201, 235, 4, 51, 12, 152, 67, 59, 218, 114, 248, 139, 193, 90, 89, 91, 201, 194, 4, 0 })
  167. ' push ebx
  168. ' push ecx
  169. ' push edx
  170. ' mov eax,[ebp+8]
  171. ' .if !eax
  172. ' jmp ASM_END
  173. ' .endif
  174. ' mov eax,[eax]
  175. ' .if !eax
  176. ' jmp ASM_END
  177. ' .endif
  178. ' mov edx,[eax+4]
  179. ' .if !edx
  180. ' xor eax,eax
  181. ' jmp ASM_END
  182. ' .endif
  183. ' add eax,8
  184. ' xor ebx,ebx
  185. ' xor ecx,ecx
  186. ' .while ebx < edx
  187. ' xor ecx,[eax+ebx*4]
  188. ' inc ebx
  189. ' .endw
  190. ' mov eax,ecx
  191. ' ASM_END:
  192. ' pop edx
  193. ' pop ecx
  194. ' pop ebx
  195. ' leave
  196. ' retn 4
  197. 返回 (假)

  198. .子程序 逻辑型数组_归约同或, 逻辑型, 公开, 真的数量为偶数返回真,否则返回假
  199. .参数 逻辑型数组, 逻辑型, 数组, 空成员返回假

  200. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 41, 139, 0, 11, 192, 117, 2, 235, 33, 139, 80, 4, 11, 210, 117, 4, 51, 192, 235, 22, 131, 192, 8, 51, 219, 185, 1, 0, 0, 0, 235, 4, 51, 12, 152, 67, 59, 218, 114, 248, 139, 193, 90, 89, 91, 201, 194, 4, 0 })
  201. ' push ebx
  202. ' push ecx
  203. ' push edx
  204. ' mov eax,[ebp+8]
  205. ' .if !eax
  206. ' jmp ASM_END
  207. ' .endif
  208. ' mov eax,[eax]
  209. ' .if !eax
  210. ' jmp ASM_END
  211. ' .endif
  212. ' mov edx,[eax+4]
  213. ' .if !edx
  214. ' xor eax,eax
  215. ' jmp ASM_END
  216. ' .endif
  217. ' add eax,8
  218. ' xor ebx,ebx
  219. ' mov ecx,1
  220. ' .while ebx < edx
  221. ' xor ecx,[eax+ebx*4]
  222. ' inc ebx
  223. ' .endw
  224. ' mov eax,ecx
  225. ' ASM_END:
  226. ' pop edx
  227. ' pop ecx
  228. ' pop ebx
  229. ' leave
  230. ' retn 4
  231. 返回 (假)
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 13:02 , Processed in 0.457026 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表