trim.asm

来自「工欲善其事」· 汇编 代码 · 共 67 行

ASM
67
字号
; ########################################################################

    .486                      ; create 32 bit code
    .model flat, stdcall      ; 32 bit memory model
    option casemap :none      ; case sensitive

    .code

; ########################################################################

trim proc src:DWORD

    mov ecx, src
    mov edx, src

  ; ---------------------------
  ; read leading tabs & spaces
  ; ---------------------------
  @@:
    mov al, [ecx]
    inc ecx
    cmp al, 32  ; space
    je @B
    cmp al, 9   ; tab
    je @B

    dec ecx     ; correct for following copy

  ; --------------------------------------
  ; copy the rest including trailing zero
  ; --------------------------------------
  @@:
    mov al, [ecx]
    inc ecx
    mov [edx], al
    inc edx
    cmp al, 0
    jne @B

  ; --------------------------------------
  ; back 2 to compare trailing characters
  ; --------------------------------------
    sub edx, 2

  ; ----------------------------------------------
  ; scan backwards to find first non tab or space
  ; ----------------------------------------------
  @@:
    mov al, [edx]
    dec edx
    cmp al, 32
    je @B
    cmp al, 9
    je @B

  ; --------------------------------------------------
  ; place terminator at position of last tab or space
  ; --------------------------------------------------
    mov [edx+1], byte ptr 0

    ret

trim endp

; #########################################################################

    end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?