标题:loop 循环控制问题
只看楼主
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
已结贴  问题点数:30 回复次数:5 
loop 循环控制问题
程序代码:
assume cs:code


  code segment

   start:
       so:
           mov ah,01h
           int 21h       ;input a number
                
           mov bh,00h
           mov bl,al     ;这两句是把输入的数据保存到cx中去,用来控制循环
          
           mov cx,bx

       s:  mov dl,07h      ;响铃
           mov ah,02h
           int 21h
           loop s
       jmp so
           mov ax,4c00h
           int 21h

   code ends

 end start
题目描述:输入个位数N 响铃N 次,但是无论我输入什么都是响铃一次~包括输入字符也是~,不知道为何~debug追踪我输入4后cx居然编程0034h 岂不是要循环34次~而我要循环4次呢~,结果就响铃一次,郁闷~。麻烦前辈们给看看哈~,谢谢
搜索更多相关主题的帖子: loop 控制问题 
2010-10-18 18:55
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:10 
不知道为何~debug追踪我输入4后cx居然编程0034h

自己想想 34h是什么。。。

提示:

附录3.1 字符功能调用类的说明

(1)、功能01H、07H和08H
 功能描述:  从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾
入口参数:  AH=01H,过滤掉控制字符,并回显
 =07H,不过滤掉控制字符,不回显
 =08H,过滤掉控制字符,不回显
出口参数:  AL=输入字符的ASCII码


2010-10-18 20:06
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
程序代码:
assume cs:code


  code segment

   start:
      
            mov ah,01h
            int 21h       ;input a number

            sub al,30h     ;34-30等于4 34是4 的十六进制形式,这样就行了应该
            cmp al,0h       ; 如果是零就跳出
        jz   exit  
             mov cl,al     ;把输入的值减去30h后保存到cx控制循环次数
             mov ch,0
         
         s: mov dl,07h
            mov ah,02h
            int 21h
          
           
           loop s
            

        exit:
           mov ax,4c00h
           int 21h

   code ends

 end start
首先先谢谢版主了~,但是我改成这样后debug追踪运行结果是对的,能循环比如我输入4就循环四次在debug 情况下~但是我直接运行可执行文件就还是一次啊~搞不明白了
2010-10-18 20:20
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
自己顶起来~,麻烦大家出谋划策下哈~,真不知道错在哪儿
2010-10-19 13:50
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
得分:20 
CODE SEGMENT
    ASSUME CS:CODE
START:
    MOV AH,01H
    INT 21H
   
    CMP AL,30H
    JLE EXIT            ;对输入数据处理,只能是0-9,a-f,A-F
    CMP AL,3AH
    JB S
    AND AL,0FH
    ADD AL,09H
    CMP AL,0FH
    JA EXIT
    JMP S1
S:
    AND AL,0FH
S1:
    MOV DL,07H
    MOV AH,2H
    MOV CL,AL
    XOR CH,CH
LOP:
    INT 21H
    PUSH CX
    PUSH DX
    MOV DX,2000H
DELAY:                ;关键是少了个延时
    MOV CX,2000H
WAIT1:
    LOOP WAIT1
    DEC DX
    JNZ DELAY
    POP DX
    POP CX
    LOOP LOP
   
EXIT:
    MOV AH,4CH
    INT 21H
CODE ENDS
    END START
   
2010-10-19 18:00
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
谢谢了~,那个延时我还没学到呢~,我好好看看
2010-10-21 08:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-323270-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.328723 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved