注册 登录
编程论坛 汇编论坛

loop 循环控制问题

遮天云 发布于 2010-10-18 18:55, 584 次点击
程序代码:
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次呢~,结果就响铃一次,郁闷~。麻烦前辈们给看看哈~,谢谢
5 回复
#2
zklhp2010-10-18 20:06
不知道为何~debug追踪我输入4后cx居然编程0034h

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

提示:

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

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


#3
遮天云2010-10-18 20:20
程序代码:
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 情况下~但是我直接运行可执行文件就还是一次啊~搞不明白了
#4
遮天云2010-10-19 13:50
自己顶起来~,麻烦大家出谋划策下哈~,真不知道错在哪儿
#5
xiaomarn2010-10-19 18:00
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
   
#6
遮天云2010-10-21 08:05
谢谢了~,那个延时我还没学到呢~,我好好看看
1