strxmov.asm
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. ; Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2. ; This library is free software; you can redistribute it and/or
  3. ; modify it under the terms of the GNU Library General Public
  4. ; License as published by the Free Software Foundation; either
  5. ; version 2 of the License, or (at your option) any later version.
  6. ; This library is distributed in the hope that it will be useful,
  7. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  9. ; Library General Public License for more details.
  10. ; You should have received a copy of the GNU Library General Public
  11. ; License along with this library; if not, write to the Free
  12. ; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  13. ; MA 02111-1307, USA
  14. TITLE   Optimized strxmov for MSDOS / Intel 8086
  15. ifndef M_I386
  16. .8087
  17. DOSSEG
  18. .MODEL LARGE
  19. .CODE
  20. PUBLIC _strxmov
  21. _strxmov PROC
  22. mov bx,sp
  23. add bx,4
  24. push si
  25. push di
  26. mov cx,ds ; Save ds
  27. ASSUME DS: NOTHING
  28. ASSUME ES: NOTHING
  29. les di,DWORD PTR ss:[bx] ; dst
  30. jmp next_str
  31. start_str:
  32. mov al,ds:[si]
  33. movsb ; move arg
  34. and al,al
  35. jnz start_str ; Not last
  36. dec di
  37. next_str:
  38. add bx,4
  39. lds si,DWORD PTR ss:[bx]
  40. mov ax,ds
  41. or ax,si
  42. jnz start_str
  43. mov byte ptr es:[di],0 ; Force end null (if no source)
  44. mov ds,cx
  45. mov ax,di ; Return ptr to last 0
  46. mov dx,es
  47. pop di
  48. pop si
  49. ret
  50. _strxmov ENDP
  51. else
  52. include macros.asm
  53. begcode strxmov
  54. public _strxmov
  55. _strxmov PROC near
  56. ASSUME DS: NOTHING
  57. ASSUME ES: NOTHING
  58. push EBP
  59. mov EBP,ESP
  60. mov EDX,EBX ; Save EBX
  61. mov ECX,ESI ; Save ESI
  62. push EDI
  63. mov EDI,8[EBP] ; Get destination
  64. lea EBX,8[EBP] ; Get adress to first source - 4
  65. xor al,al
  66. jmp next_str
  67. start_str: movsb
  68. cmp AL,[EDI-1]
  69. jne start_str
  70. dec EDI ; Don't copy last null
  71. next_str: add EBX,4
  72. mov ESI,[EBX]
  73. or ESI,ESI
  74. jne start_str
  75. mov byte ptr [EDI],0 ; Force last null
  76. mov EAX,EDI ; Return ptr to null
  77. pop EDI
  78. mov ESI,ECX
  79. mov EBX,EDX
  80. pop EBP
  81. ret
  82. _strxmov endp
  83. endcode strxmov
  84. endif
  85. END