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

从F到0 - From F to 0

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

易语言MASM置入代码实现字节集、字节型数组的字节位反转 字节高低位翻转 (返回逻辑型)

[复制链接]
发表于 2023-6-12 21:07:50 | 显示全部楼层 |阅读模式
1.png
  1. .版本 2
  2. .支持库 spec

  3. .程序集 程序集1

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


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

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

  11. A = 取空白字节集 (256)
  12. 重定义数组 (B, 假, 256)
  13. .变量循环首 (0, 255, 1, 计数)
  14.     A [计数 + 1] = 计数
  15.     B [计数 + 1] = 计数
  16. .变量循环尾 ()
  17. 输出调试文本 (字节集_字节位反转 (A))
  18. 输出调试文本 (字节型数组_字节位反转 (B))
  19. 调试输出 (A)
  20. 写到文件 (“BitReverseTable.bin”, A)
  21. 调试输出 (A = 到字节集 (B))

  22. .子程序 字节集_字节位反转, 逻辑型, 公开, 字节集高低位倒序颠倒翻转,成功返回真,失败返回假
  23. .参数 字节集, 字节集, 参考, 输入:0x01 翻转后输出:0x80,以此类推

  24. 置入代码 ({ 83, 81, 82, 139, 69, 8, 131, 248, 0, 127, 4, 51, 192, 235, 60, 139, 0, 131, 248, 0, 127, 4, 51, 192, 235, 49, 139, 88, 4, 131, 251, 0, 127, 4, 51, 192, 235, 37, 131, 192, 8, 131, 248, 0, 127, 4, 51, 192, 235, 25, 51, 201, 235, 12, 138, 20, 1, 232, 20, 0, 0, 0, 136, 20, 1, 65, 59, 203, 114, 240, 184, 1, 0, 0, 0, 90, 89, 91, 201, 194, 4, 0, 102, 80, 102, 83, 102, 81, 183, 1, 179, 128, 102, 51, 192, 235, 16, 138, 207, 34, 202, 10, 201, 116, 2, 10, 195, 208, 231, 208, 235, 254, 196, 128, 252, 8, 114, 235, 138, 208, 102, 89, 102, 91, 102, 88, 195 })
  25. ' push ebx
  26. ' push ecx
  27. ' push edx
  28. ' mov eax,[ebp+8]
  29. ' .if sdword ptr eax <= 0
  30. ' xor eax,eax
  31. ' jmp ASM_END
  32. ' .endif
  33. ' mov eax,[eax]
  34. ' .if sdword ptr eax <= 0
  35. ' xor eax,eax
  36. ' jmp ASM_END
  37. ' .endif
  38. ' mov ebx,[eax+4]  ;字节集长度
  39. ' .if sdword ptr ebx <= 0
  40. ' xor eax,eax
  41. ' jmp ASM_END
  42. ' .endif
  43. ' add eax,8
  44. ' .if sdword ptr eax <= 0
  45. ' xor eax,eax
  46. ' jmp ASM_END
  47. ' .endif
  48. ' xor ecx,ecx
  49. ' .while ecx < ebx
  50. ' mov dl,[eax+ecx]
  51. ' call BitReverse
  52. ' mov [eax+ecx],dl
  53. ' inc ecx
  54. ' .endw
  55. ' mov eax,1
  56. ' ASM_END:
  57. ' pop edx
  58. ' pop ecx
  59. ' pop ebx
  60. ' leave
  61. ' retn 4
  62. ' BitReverse: ;位反转 输入:dl(0x01) 翻转后输出:dl(0x80)
  63. ' push ax
  64. ' push bx
  65. ' push cx
  66. ' mov bh,1
  67. ' mov bl,128
  68. ' xor ax,ax
  69. ' .while ah < 8
  70. ' mov cl,bh
  71. ' and cl,dl
  72. ' .if cl
  73. ' or al,bl
  74. ' .endif
  75. ' shl bh,1
  76. ' shr bl,1
  77. ' inc ah
  78. ' .endw
  79. ' mov dl,al
  80. ' pop cx
  81. ' pop bx
  82. ' pop ax
  83. ' ret
  84. 返回 (假)

  85. .子程序 字节型数组_字节位反转, 逻辑型, 公开, 字节型数组高低位倒序颠倒翻转,成功返回真,失败返回假
  86. .参数 字节型数组, 字节型, 数组, 输入:0x01 翻转后输出:0x80,以此类推

  87. 置入代码 ({ 83, 81, 82, 139, 69, 8, 131, 248, 0, 127, 4, 51, 192, 235, 60, 139, 0, 131, 248, 0, 127, 4, 51, 192, 235, 49, 139, 88, 4, 131, 251, 0, 127, 4, 51, 192, 235, 37, 131, 192, 8, 131, 248, 0, 127, 4, 51, 192, 235, 25, 51, 201, 235, 12, 138, 20, 1, 232, 20, 0, 0, 0, 136, 20, 1, 65, 59, 203, 114, 240, 184, 1, 0, 0, 0, 90, 89, 91, 201, 194, 4, 0, 102, 80, 102, 83, 102, 81, 183, 1, 179, 128, 102, 51, 192, 235, 16, 138, 207, 34, 202, 10, 201, 116, 2, 10, 195, 208, 231, 208, 235, 254, 196, 128, 252, 8, 114, 235, 138, 208, 102, 89, 102, 91, 102, 88, 195 })
  88. ' push ebx
  89. ' push ecx
  90. ' push edx
  91. ' mov eax,[ebp+8]
  92. ' .if sdword ptr eax <= 0
  93. ' xor eax,eax
  94. ' jmp ASM_END
  95. ' .endif
  96. ' mov eax,[eax]
  97. ' .if sdword ptr eax <= 0
  98. ' xor eax,eax
  99. ' jmp ASM_END
  100. ' .endif
  101. ' mov ebx,[eax+4]  ;字节集长度
  102. ' .if sdword ptr ebx <= 0
  103. ' xor eax,eax
  104. ' jmp ASM_END
  105. ' .endif
  106. ' add eax,8
  107. ' .if sdword ptr eax <= 0
  108. ' xor eax,eax
  109. ' jmp ASM_END
  110. ' .endif
  111. ' xor ecx,ecx
  112. ' .while ecx < ebx
  113. ' mov dl,[eax+ecx]
  114. ' call BitReverse
  115. ' mov [eax+ecx],dl
  116. ' inc ecx
  117. ' .endw
  118. ' mov eax,1
  119. ' ASM_END:
  120. ' pop edx
  121. ' pop ecx
  122. ' pop ebx
  123. ' leave
  124. ' retn 4
  125. ' BitReverse: ;位反转 输入:dl(0x01) 翻转后输出:dl(0x80)
  126. ' push ax
  127. ' push bx
  128. ' push cx
  129. ' mov bh,1
  130. ' mov bl,128
  131. ' xor ax,ax
  132. ' .while ah < 8
  133. ' mov cl,bh
  134. ' and cl,dl
  135. ' .if cl
  136. ' or al,bl
  137. ' .endif
  138. ' shl bh,1
  139. ' shr bl,1
  140. ' inc ah
  141. ' .endw
  142. ' mov dl,al
  143. ' pop cx
  144. ' pop bx
  145. ' pop ax
  146. ' ret
  147. 返回 (假)
复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-4-27 19:56 , Processed in 0.940054 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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