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

从F到0 - From F to 0

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

易语言MASM置入代码实现交换替换字节型数组(字节集数据)中的两个指定字节 (无返回值)

[复制链接]
发表于 2020-9-11 22:29:13 | 显示全部楼层 |阅读模式
1.png

  1. .版本 2
  2. .支持库 spec

  3. .程序集 程序集1

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


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

  7. .子程序 _临时子程序
  8. .局部变量 A, 字节集
  9. .局部变量 B, 字节型, , "0"

  10. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  11. A = { 1, 0, 1, 0, 123, 1, 123, 1 }
  12. 字节集_交换替换 (A, 1, 123)  ' 将1替换为123,再将123替换为1
  13. 调试输出 (A)
  14. B = { 1, 0, 1, 0, 123, 1, 123, 1 }
  15. 字节型数组_交换替换 (B, 1, 123)
  16. 调试输出 (B)
  17. 字节型数组_交换字节 (B, 1, 123)
  18. 调试输出 (B)


  19. .子程序 字节集_交换替换, , 公开, 被交换字节=1 交换字节=2 将1替换为2,再将2替换为1,不能相同否则不转换
  20. .参数 字节集, 字节集, 参考
  21. .参数 被交换字节, 字节型
  22. .参数 交换字节, 字节型

  23. 置入代码 ({ 80, 83, 81, 82, 86, 139, 69, 8, 11, 192, 117, 2, 235, 58, 139, 0, 11, 192, 117, 2, 235, 50, 139, 112, 4, 138, 85, 12, 138, 117, 16, 11, 246, 116, 4, 56, 242, 117, 2, 235, 31, 131, 192, 8, 51, 201, 235, 20, 138, 28, 1, 56, 211, 117, 5, 136, 52, 1, 235, 7, 56, 243, 117, 3, 136, 20, 1, 65, 59, 206, 114, 232, 94, 90, 89, 91, 88, 201, 194, 12, 0 })
  24. ' push eax
  25. ' push ebx
  26. ' push ecx
  27. ' push edx
  28. ' push esi
  29. ' mov eax,[ebp+8]
  30. ' .if !eax
  31. ' jmp ASM_END
  32. ' .endif
  33. ' mov eax,[eax]
  34. ' .if !eax
  35. ' jmp ASM_END
  36. ' .endif
  37. ' mov esi,[eax+4]
  38. ' mov dl,[ebp+12]
  39. ' mov dh,[ebp+16]
  40. ' .if !esi || dl == dh
  41. ' jmp ASM_END
  42. ' .endif
  43. ' add eax,8
  44. ' xor ecx,ecx
  45. ' .while ecx<esi
  46. ' mov bl,[eax+ecx]
  47. ' .if bl == dl
  48. ' mov [eax+ecx],dh
  49. ' .elseif bl == dh
  50. ' mov [eax+ecx],dl
  51. ' .endif
  52. ' inc ecx
  53. ' .endw
  54. ' ASM_END:
  55. ' pop esi
  56. ' pop edx
  57. ' pop ecx
  58. ' pop ebx
  59. ' pop eax
  60. ' leave
  61. ' retn 12


  62. .子程序 字节型数组_交换替换, , 公开, 使用方法见 字节集_交换替换()
  63. .参数 字节型数组, 字节型, 参考 数组
  64. .参数 被交换字节, 字节型, , 不能与 交换字节 相同
  65. .参数 交换字节, 字节型

  66. 置入代码 ({ 80, 83, 81, 82, 86, 139, 69, 8, 11, 192, 117, 2, 235, 58, 139, 0, 11, 192, 117, 2, 235, 50, 139, 112, 4, 138, 85, 12, 138, 117, 16, 11, 246, 116, 4, 56, 242, 117, 2, 235, 31, 131, 192, 8, 51, 201, 235, 20, 138, 28, 1, 56, 211, 117, 5, 136, 52, 1, 235, 7, 56, 243, 117, 3, 136, 20, 1, 65, 59, 206, 114, 232, 94, 90, 89, 91, 88, 201, 194, 12, 0 })
  67. ' push eax
  68. ' push ebx
  69. ' push ecx
  70. ' push edx
  71. ' push esi
  72. ' mov eax,[ebp+8]
  73. ' .if !eax
  74. ' jmp ASM_END
  75. ' .endif
  76. ' mov eax,[eax]
  77. ' .if !eax
  78. ' jmp ASM_END
  79. ' .endif
  80. ' mov esi,[eax+4]
  81. ' mov dl,[ebp+12]
  82. ' mov dh,[ebp+16]
  83. ' .if !esi || dl == dh
  84. ' jmp ASM_END
  85. ' .endif
  86. ' add eax,8
  87. ' xor ecx,ecx
  88. ' .while ecx<esi
  89. ' mov bl,[eax+ecx]
  90. ' .if bl == dl
  91. ' mov [eax+ecx],dh
  92. ' .elseif bl == dh
  93. ' mov [eax+ecx],dl
  94. ' .endif
  95. ' inc ecx
  96. ' .endw
  97. ' ASM_END:
  98. ' pop esi
  99. ' pop edx
  100. ' pop ecx
  101. ' pop ebx
  102. ' pop eax
  103. ' leave
  104. ' retn 12

复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-3-29 07:26 , Processed in 0.517030 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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