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

从F到0 - From F to 0

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

易语言MASM汇编置入代码实现检测文本型IP地址(IPv4地址)格式是否有效 (返回逻辑型)

[复制链接]
发表于 2019-8-25 06:30:12 | 显示全部楼层 |阅读模式

  1. .版本 2

  2. .程序集 程序集1

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


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

  6. .子程序 _临时子程序

  7. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

  8. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“0.0.0.0”))
  9. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“255.255.255.255”))
  10. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“127.0.0.1”))
  11. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“384.123.123.123”))
  12. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“192.168.0.1”))
  13. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“123.123.123.123”))
  14. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“172.300.222.8”))
  15. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“”))
  16. 输出调试文本 (文本型_IPv4地址_格式是否有效 (“13..13.13”))




  17. .子程序 文本型_IPv4地址_格式是否有效, 逻辑型, 公开
  18. .参数 IPv4地址, 文本型

  19. 置入代码 ({ 83, 81, 82, 86, 87, 139, 69, 8, 139, 0, 232, 166, 0, 0, 0, 131, 250, 7, 114, 5, 131, 250, 15, 118, 7, 51, 192, 233, 140, 0, 0, 0, 232, 168, 0, 0, 0, 131, 250, 3, 116, 4, 51, 192, 235, 126, 232, 180, 0, 0, 0, 10, 210, 117, 4, 51, 192, 235, 113, 232, 22, 1, 0, 0, 10, 210, 116, 4, 51, 192, 235, 100, 232, 46, 1, 0, 0, 10, 210, 117, 4, 51, 192, 235, 87, 50, 201, 235, 73, 232, 176, 0, 0, 0, 102, 129, 250, 255, 0, 118, 4, 51, 192, 235, 67, 128, 249, 3, 115, 50, 102, 131, 250, 0, 114, 11, 102, 131, 250, 9, 119, 5, 131, 192, 2, 235, 33, 102, 131, 250, 10, 114, 11, 102, 131, 250, 99, 119, 5, 131, 192, 3, 235, 16, 102, 131, 250, 100, 114, 10, 102, 129, 250, 255, 0, 119, 3, 131, 192, 4, 254, 193, 128, 249, 4, 114, 178, 184, 1, 0, 0, 0, 95, 94, 90, 89, 91, 201, 194, 4, 0, 80, 83, 139, 208, 138, 24, 10, 219, 117, 2, 235, 3, 64, 235, 245, 139, 216, 135, 218, 43, 211, 91, 88, 195, 80, 83, 51, 210, 138, 24, 10, 219, 117, 4, 235, 11, 235, 6, 128, 251, 46, 117, 1, 66, 64, 235, 237, 91, 88, 195, 80, 83, 138, 24, 10, 219, 117, 6, 178, 1, 235, 24, 235, 19, 128, 251, 48, 114, 5, 128, 251, 57, 118, 9, 128, 251, 46, 116, 4, 50, 210, 235, 3, 64, 235, 222, 91, 88, 195, 83, 81, 86, 51, 210, 51, 219, 51, 201, 190, 10, 0, 0, 0, 235, 48, 138, 28, 1, 128, 251, 48, 114, 5, 128, 251, 57, 118, 4, 235, 37, 235, 30, 128, 251, 48, 117, 7, 10, 255, 117, 3, 70, 235, 18, 183, 1, 128, 235, 48, 107, 210, 10, 83, 129, 227, 255, 0, 0, 0, 3, 211, 91, 65, 59, 206, 114, 204, 94, 89, 91, 195, 80, 83, 138, 24, 10, 219, 117, 6, 50, 210, 235, 22, 235, 17, 128, 251, 46, 117, 12, 138, 88, 1, 128, 251, 46, 117, 4, 178, 1, 235, 3, 64, 235, 224, 91, 88, 195, 80, 83, 138, 24, 10, 219, 117, 6, 178, 1, 235, 40, 235, 35, 128, 251, 46, 117, 30, 138, 88, 255, 138, 120, 1, 128, 251, 48, 114, 15, 128, 251, 57, 119, 10, 128, 255, 48, 114, 5, 128, 255, 57, 118, 4, 50, 210, 235, 3, 64, 235, 206, 91, 88, 195 })
  20. ' push ebx
  21. ' push ecx
  22. ' push edx
  23. ' push esi
  24. ' push edi
  25. ' mov eax,[ebp+8]
  26. ' mov eax,[eax]
  27. ' call TEXT_LEN ;
  28. ' .if edx < 7 || edx > 15
  29. ' xor eax,eax
  30. ' jmp ASM_END
  31. ' .endif
  32. ' call TEXT_POINT_NUM
  33. ' .if edx != 3
  34. ' xor eax,eax
  35. ' jmp ASM_END
  36. ' .endif
  37. ' call IS_TEXT_NUM_POINT
  38. ' .if !dl
  39. ' xor eax,eax
  40. ' jmp ASM_END
  41. ' .endif
  42. ' call IS_TEXT_POINT2
  43. ' .if dl
  44. ' xor eax,eax
  45. ' jmp ASM_END
  46. ' .endif
  47. ' call IS_TEXT_POINT_LR_NUM
  48. ' .if !dl
  49. ' xor eax,eax
  50. ' jmp ASM_END
  51. ' .endif
  52. ' xor cl,cl
  53. ' .while cl < 4
  54. ' call TEXT2INT
  55. ' .if dx > 255
  56. ' xor eax,eax
  57. ' jmp ASM_END
  58. ' .endif
  59. ' .if cl < 3
  60. ' .if dx >= 0 && dx <= 9
  61. ' add eax,2
  62. ' .elseif dx >= 10 && dx <= 99
  63. ' add eax,3
  64. ' .elseif dx >= 100 && dx <= 255
  65. ' add eax,4
  66. ' .endif
  67. ' .endif
  68. ' inc cl
  69. ' .endw
  70. ' mov eax,1
  71. ' ASM_END:
  72. ' pop edi
  73. ' pop esi
  74. ' pop edx
  75. ' pop ecx
  76. ' pop ebx
  77. ' leave
  78. ' retn 4
  79. ' TEXT_LEN: ;EAX:文本指针 EDX(返回):文本长度
  80. ' push eax
  81. ' push ebx
  82. ' mov edx,eax
  83. ' .while 1
  84. ' mov bl,[eax]
  85. ' .if !bl
  86. ' .break
  87. ' .endif
  88. ' inc eax
  89. ' .endw
  90. ' mov ebx,eax
  91. ' xchg ebx,edx
  92. ' sub edx,ebx
  93. ' pop ebx
  94. ' pop eax
  95. ' ret
  96. ' TEXT_POINT_NUM:  ;EAX:文本指针 EDX:返回小数点的数量
  97. ' push eax
  98. ' push ebx
  99. ' xor edx,edx
  100. ' .while 1
  101. ' mov bl,[eax]
  102. ' .if !bl
  103. ' .break
  104. ' .elseif bl == 46
  105. ' inc edx
  106. ' .endif
  107. ' inc eax
  108. ' .endw
  109. ' pop ebx
  110. ' pop eax
  111. ' ret
  112. ' IS_TEXT_NUM_POINT: ;EAX:文本指针 DL:返回1或0 是否只包含数字0~9和小数点
  113. ' push eax
  114. ' push ebx
  115. ' .while 1
  116. ' mov bl,[eax]
  117. ' .if ! bl
  118. ' mov dl,1
  119. ' .break
  120. ' .elseif (bl < 48 || bl > 57) && bl != 46
  121. ' xor dl,dl
  122. ' .break
  123. ' .endif
  124. ' inc eax
  125. ' .endw
  126. ' pop ebx
  127. ' pop eax
  128. ' ret
  129. ' ;文本整数转整数型(不支持负数,遇到其他字符终止转换)
  130. ' ;EAX:文本指针 EDX:整数输出
  131. ' TEXT2INT:
  132. ' push ebx
  133. ' push ecx
  134. ' push esi
  135. ' xor edx,edx
  136. ' xor ebx,ebx
  137. ' xor ecx,ecx
  138. ' mov esi,10
  139. ' .while ecx < esi
  140. ' mov bl,[eax+ecx]
  141. ' .if bl < 48 || bl > 57
  142. ' .break
  143. ' .elseif bl == 48 && !bh
  144. ' inc esi
  145. ' .else
  146. ' mov bh,1
  147. ' sub bl,48
  148. ' imul edx,10
  149. ' push ebx
  150. ' and ebx,255
  151. ' add edx,ebx
  152. ' pop ebx
  153. ' .endif
  154. ' inc ecx
  155. ' .endw
  156. ' pop esi
  157. ' pop ecx
  158. ' pop ebx
  159. ' ret
  160. ' IS_TEXT_POINT2:  ;文本中是否有两个连续的小数点 EAX:文本指针 DL:返回1或0
  161. ' push eax
  162. ' push ebx
  163. ' .while 1
  164. ' mov bl,[eax]
  165. ' .if !bl
  166. ' xor dl,dl
  167. ' .break
  168. ' .elseif bl == 46
  169. ' mov bl,[eax+1]
  170. ' .if bl == 46
  171. ' mov dl,1
  172. ' .break
  173. ' .endif
  174. ' .endif
  175. ' inc eax
  176. ' .endw
  177. ' pop ebx
  178. ' pop eax
  179. ' ret
  180. ' IS_TEXT_POINT_LR_NUM: ;小数点左右是否都是数字 EAX:文本指针 DL:返回1或0
  181. ' push eax
  182. ' push ebx
  183. ' .while 1
  184. ' mov bl,[eax]
  185. ' .if !bl
  186. ' mov dl,1
  187. ' .break
  188. ' .elseif bl == 46
  189. ' mov bl,[eax-1]
  190. ' mov bh,[eax+1]
  191. ' .if bl < 48 || bl > 57 || bh < 48 || bh > 57
  192. ' xor dl,dl
  193. ' .break
  194. ' .endif
  195. ' .endif
  196. ' inc eax
  197. ' .endw
  198. ' pop ebx
  199. ' pop eax
  200. ' ret

  201. 返回 (假)

复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-4-17 04:30 , Processed in 0.440025 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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