. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->《IBM-PC汇编语言程序设计》支持区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  如何用汇编实现嵌套循环  [待解决] 回复[ 3次 ]   点击[ 567次 ]  
lanshiming
[帖 主]   [ 发表时间:2009-12-07 13:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-24 07:22
data segment
 str  db 100         ;句子
      db ?
      db 100 dup(?)
 data   ends

sseg segment stack
        dw   20h   dup(?)
   tos        label   word
 sseg        ends

code segment
     assume  cs:code,ss:sseg,ds:data
 start:
       mov   ax,offset data
       mov   ds,ax
       mov   ax,sseg
       mov   ss,ax

       mov   ah,0ah         ;输入句子
       mov   dx,offset str
       int   21h

       mov  ah,2  ;换行输出
       mov  dl,0dH  
       int  21h  
       mov  dl,0aH  
       int  21h

       mov   bx,offset  str   ;将$ 赋给句末
       mov   al,str+1
       and   ah,0h
       add   bx,ax
       add   bx,2
       mov   al,24h
       mov   [bx],al

       mov   dx,offset str      ;将句子输出
       add   dx,02h
       mov   ah,9h
       int   21h
       
       mov  ah,2  ;换行输出
       mov  dl,0dH  
       int  21h  
       mov  dl,0aH  
       int  21h
     

       mov   bx,offset str
       add   bx,1

       and   dx,0h

 next:                  ;与空格和$比较
       inc   bx
       mov   ah,0
       mov   al,[bx]
       cmp   al,24h      ;$
       je    out1
       cmp   al,20h      ;空格
       je    next
       
       mov   cx,bx 
       inc   dl      ;记录单词个数
       inc   ah      ;记录各个单词长度
       mov   si,0h   ;记录最长单词首地址
      
 next1:              ;与空格或$比较
       inc   bx
       mov   al,[bx]
       cmp   al,20h
       je    next
       cmp   al,24h
       je    out1
       inc   ah
       cmp   dh,ah     ;dh记录最长单词长度
       jb    lp1  
           

       jmp   next1   
 
lp1:   mov   dh,ah
       mov   si,cx
       jmp   next1
    
       jmp    out1


       
      
 out1: 
       add   dl,30h
       mov   ah,02h
       int   21h
      
       mov   ah,2  ;换行输出
       mov   dl,0dH  
       int   21h  
       mov   dl,0aH  
       int   21h

       mov   dl,dh
       add   dl,30h
       mov   ah,02h
       int   21h
    
       mov   ah,2  ;换行输出
       mov   dl,0dH  
       int   21h  
       mov   dl,0aH  
       int   21h
              
      
       mov   cl,dh
       and   ch,0h
 next2:               ;输出最长单词
       mov   dl,[si]
       mov   ah,02h
       int   21h
       inc   si
       loop   next2 

      
       
 
       mov   ah,01h
       int   21h
    
       mov   ah,4ch
       int   21h
 code   ends
     end  start
      我这个程序已经能把一个最长单词输出,请问如果最长单词有多个应该怎么输出?
abob
[第1楼]   [ 回复时间:2009-12-18 10:14 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
把输出单词做成一个子程序,检测到不论几个最长单词,都调用子程序输出就是了。
abob
[第2楼]   [ 回复时间:2009-12-18 10:15 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
也就是分成两部分,一个是输出单词子程序,一个是检测是不是最长单词,是则调用子程序输出之。
turl
[第3楼]   [ 回复时间:2010-09-21 14:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-09-16 15:53
嵌套循环主要就是将cx值暂时存储起来,用栈,或寄存器或存储单元,然后再讲cx用于新的子循环,最后将外循环的cx值还原!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved