免扫码快速登录设为首页收藏本站帮助中心
查看: 171|回复: 1
收起左侧

易语言MASM汇编置入代码无需除法指令实现获取字节型的个位数,十位数,百位数(无返回值)

[复制链接]
发表于 2019-8-27 10:01:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x

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

  3. .程序集 程序集1

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


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

  7. .子程序 _临时子程序
  8. .局部变量 个位数, 整数型
  9. .局部变量 十位数, 整数型
  10. .局部变量 百位数, 整数型
  11. .局部变量 A, 整数型
  12. .局部变量 B, 字节型

  13. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  14. .变量循环首 (0, 255, 1, A)
  15.     取个十百位数_易源码 (A, 个位数, 十位数, 百位数)

  16.     检查 (A = 百位数 × 100 + 十位数 × 10 + 个位数)
  17.     取个十百位数_置入代码 (A, 个位数, 十位数, 百位数)
  18.     检查 (A = 百位数 × 100 + 十位数 × 10 + 个位数)
  19.     调试输出 (A, 百位数, 十位数, 个位数)


  20. .变量循环尾 ()

  21. .子程序 取个十百位数_易源码, , 公开
  22. .参数 AL, 字节型, , 字节
  23. .参数 AH, 字节型, 参考, 个位数
  24. .参数 BL, 字节型, 参考, 十位数
  25. .参数 BH, 字节型, 参考, 百位数
  26. .局部变量 CL, 整数型
  27. .局部变量 CH, 字节型
  28. .局部变量 DL, 字节型

  29. DL = AL
  30. AH = 0
  31. BL = 0
  32. BH = 0
  33. .判断开始 (AL ≥ 0 且 AL ≤ 9)
  34.     AH = AL
  35.     返回 ()
  36. .判断 (AL ≥ 10 且 AL ≤ 99)
  37.     CH = 9
  38.     CL = 90
  39.     .判断循环首 (CL ≥ 10)
  40.         .如果真 (AL ≥ CL)
  41.             AH = AL
  42.             AH = AH - CL
  43.             BL = CH
  44.             返回 ()
  45.         .如果真结束
  46.         CH = CH - 1
  47.         CL = CL - 10
  48.     .判断循环尾 ()
  49. .判断 (AL ≥ 100 且 AL ≤ 255)
  50.     CH = 2
  51.     CL = 200
  52.     .判断循环首 (CL ≥ 100)
  53.         .如果真 (AL ≥ CL)
  54.             BH = CH
  55.             CH = 9
  56.             AL = AL - CL
  57.             CL = 90
  58.             .判断循环首 (CL ≥ 0)
  59.                 .如果真 (AL ≥ CL)
  60.                     AH = AL
  61.                     AH = AH - CL
  62.                     BL = CH
  63.                     返回 ()
  64.                 .如果真结束
  65.                 CH = CH - 1
  66.                 CL = CL - 10
  67.             .判断循环尾 ()
  68.         .如果真结束
  69.         CH = CH - 1
  70.         CL = CL - 100
  71.     .判断循环尾 ()
  72. .默认

  73. .判断结束



  74. .子程序 取个十百位数_置入代码, , 公开
  75. .参数 字节, 字节型, , 0~255
  76. .参数 个位数, 字节型, 参考, 0~9
  77. .参数 十位数, 字节型, 参考, 0~9
  78. .参数 百位数, 字节型, 参考, 0~2

  79. 置入代码 ({ 96, 138, 69, 8, 232, 20, 0, 0, 0, 139, 77, 12, 136, 33, 139, 77, 16, 136, 25, 139, 77, 20, 136, 57, 97, 201, 194, 16, 0, 81, 82, 138, 208, 50, 228, 50, 219, 50, 255, 60, 0, 114, 10, 60, 9, 119, 6, 138, 224, 235, 100, 235, 98, 60, 10, 114, 34, 60, 99, 119, 30, 181, 9, 177, 90, 235, 17, 56, 200, 114, 8, 138, 224, 42, 225, 138, 221, 235, 72, 254, 205, 128, 233, 10, 128, 249, 10, 115, 234, 235, 60, 60, 100, 114, 56, 60, 255, 119, 52, 181, 2, 177, 200, 235, 41, 56, 200, 114, 32, 138, 253, 181, 9, 42, 193, 177, 90, 235, 17, 56, 200, 114, 8, 138, 224, 42, 225, 138, 221, 235, 20, 254, 205, 128, 233, 10, 128, 249, 0, 115, 234, 254, 205, 128, 233, 100, 128, 249, 100, 115, 210, 138, 194, 90, 89, 195 })
  80. ' pushad
  81. ' mov al,[ebp+8]
  82. ' call GET_BYTE_UTH
  83. ' mov ecx,[ebp+12]
  84. ' mov [ecx],ah
  85. ' mov ecx,[ebp+16]
  86. ' mov [ecx],bl
  87. ' mov ecx,[ebp+20]
  88. ' mov [ecx],bh
  89. ' popad
  90. ' leave
  91. ' retn 16
  92. ' GET_BYTE_UTH:
  93. ' push ecx
  94. ' push edx
  95. ' mov dl,al
  96. ' xor ah,ah
  97. ' xor bl,bl
  98. ' xor bh,bh
  99. ' .if al >= 0  && al <= 9
  100. ' mov ah,al
  101. ' jmp GBU_END
  102. ' .elseif al >= 10 && al <= 99
  103. ' mov ch,9
  104. ' mov cl,90
  105. ' .while cl >= 10
  106. ' .if al >= cl
  107. ' mov ah,al
  108. ' sub ah,cl
  109. ' mov bl,ch
  110. ' jmp GBU_END
  111. ' .endif
  112. ' dec ch
  113. ' sub cl,10
  114. ' .endw
  115. ' .elseif al >= 100 && al <=255
  116. ' mov ch,2
  117. ' mov cl,200
  118. ' .while cl >= 100
  119. ' .if al >= cl
  120. ' mov bh,ch
  121. ' mov ch,9
  122. ' sub al,cl
  123. ' mov cl,90
  124. ' .while cl >= 0
  125. ' .if al >= cl
  126. ' mov ah,al
  127. ' sub ah,cl
  128. ' mov bl,ch
  129. ' jmp GBU_END
  130. ' .endif
  131. ' dec ch
  132. ' sub cl,10
  133. ' .endw
  134. ' .endif
  135. ' dec ch
  136. ' sub cl,100
  137. ' .endw
  138. ' .endif
  139. ' GBU_END:
  140. ' mov al,dl
  141. ' pop edx
  142. ' pop ecx
  143. ' ret

复制代码

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则