evilknight 发表于 2010-1-25 23:11:08

strcmp(asm)

assume cs:code,ds:data

data segment
      strSou db 'Hello world!
      strDis db 'Hello world!
      ; Tips Message
      TipsBig db 'string source big string distation!
      TipsEqual db 'string source Equa string distation!
      TipsLess db 'string source Less string distation!
data ends

code segment
start:mov ax, data
      mov ds, ax
      mov es, ax
      
      mov si, offset strSou
      mov di, offset strDis
      
      cld
      xor cx, cx
NEXT:   cmp byte ptr, '
      jz SOUEND                     ; 如果第一个字符串已经结束的话,再判断第二个有没有结束
      cmp byte ptr , '          ; 如果第一个没有结束,判断第二个有没有结束
      jz SOUBIG                     ; 如果第二个已经结束的话

      ; 再判断二个是不是相等
      cmpsb
      jl SOULES                     ; 如果第一个小于第二个的话,跳出
      jg SOUBIG                     ; 如果第一个大于第二个的话,跳出
      inc cx                        ; 如果相等的话,继续loop
      jmp NEXT
      
SOUEND: cmp byte ptr , '          ; 当第一个已经结束的话再判断第二个是否结束
      jzSOUQUE                      ; 如果等于0的话,说明相等
      jmp SOULES                      ; 否则第二个大于第一个

SOUBIG: mov dx, offset TipsBig          ; 输出第一个小于第二个
      jmp DISPLAY
SOUQUE: mov dx, offset TipsEqual      ; 等于
      jmp DISPLAY
SOULES: mov dx, offset TipsLess         ; 小于
      jmp DISPLAY   

      
DISPLAY: mov ah, 9h
      int 21h

EXIT:   mov ah, 4ch
      int 21h
      
code ends
end start

[ 本帖最后由 evilknight 于 2010-1-25 23:13 编辑 ]

FUCKCCTV 发表于 2010-1-26 00:00:30

:hug: 学习!~
页: [1]
查看完整版本: strcmp(asm)