汇编综合应用(1) Test Palindrome

在粗略的看过string instruction之后, 综合了先前所有看过的,写了个测试palindrome的程序,再次让大脑到达兴奋点,现在终于可以让大脑轻松一下了。呵呵~~~ 源码如下:

.model small
.stack 300h
.data
 str1 byte 255 dup(?)
 str2 byte 255 dup(?)
 s1 byte "Please input a string:"
 s2 byte "Palindrome matched "
 s3 byte "Palindrome unmatched"
 count word ?
 len word ?
 flag byte ?
.code

.startup 
 mov ax,@data
 mov ds,ax
 mov es,ax
 mov flag,0
 
 Main Proc
  lea bx,s1
  mov cx,lengthof s1
  add cx,bx
  mov ah,2
  Call printOut
  
  mov si,offset str1
  mov ah,8
  Call getStr1 
  
  Call CopyToStr2
  Call Reverse
  Call Check
  mov ah,2
  Call PrintNL
  
  cmp flag,1
  je Matched
  
  lea bx,s3
  mov cx,lengthof s3
  add cx,bx
  mov ah,2
  Call printOut
  .exit
  
  Matched:lea bx,s2
     mov cx,lengthof s2
     add cx,bx
     mov ah,2
     Call printOut
     .exit
  
 Main EndP
 
 printOut Proc
  loop4:cmp bx,cx
  je finish4
  mov dl,byte ptr[bx]
  int 21h
  inc bx
  jmp loop4
  finish4:ret  
 printOut EndP
 
 getStr1 Proc
  loop1:mov ah,8
    int 21h
    cmp al,13
    je finish1
    mov [si],al
    mov ah,2
    mov dl,[si]
    int 21h
    inc si
    inc len
    jmp loop1
  finish1:mov [si],0
    ret
 getStr1 EndP
 
 printNL Proc
  mov dl,10
  int 21h
  mov dl,13
  int 21h
  ret
 printNL EndP
 
 CopyToStr2 Proc
  cld
  mov cx,0
  mov cx,len
  mov si,offset str1
  mov di,offset str2
  rep movsb
  ret
 CopyToStr2 EndP
 
 Reverse Proc
  mov si,offset str1
  mov di,offset str2
  mov ax,0
  mov ax,len
  mov dx,0
  
  loop5:push ds:[si]
    inc count
    inc si
    cmp count,ax
    jl loop5
  
  loop6:pop es:[di]
    dec count
    inc di
    cmp count,0
    jg loop6
  ret
    
 Reverse EndP
 
 Check Proc
  mov cx,len
  mov si,offset str1
  mov di,offset str2
   
  rep cmpsb
  je setFlag1
  jne setFlag2
  setFlag1:mov flag,1
     ret
  setFlag2:mov flag,0  
     ret   
 Check EndP
   
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值