现在的位置: 首页 > 综合 > 正文

汇编一日一学(9)–响铃N次

2013年10月25日 ⁄ 综合 ⁄ 共 1608字 ⁄ 字号 评论关闭

 

;试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。

STACKS SEGMENT

    dw   128  dup(0)

STACKS ENDS

 

CODES SEGMENT

START:

 

Input:

    MOV AH,1        ;输入字符                                   

    INT 21H  

    CMP AL,'0'

    JLE Input

    CMP AL,'9'

    JG  Input

    SUB AL,'0' 

    CBW             ;扩展AL为AX

    MOV CX,AX       ;CX为响铃次数

   

Bell:  

    MOV DL,07H

    MOV AH,2

    INT 21H   

    LOOP Bell       ;LOOP CX-- >=0

   

    MOV AX,4C00H

    INT 21H    

CODES ENDS

    END START

 

符号扩展指令

 

节扩展为字 CBW (convert byte to word)

 

指令的汇编格式:CBW

指令的基本功能:(AH)=00H 当(AL)的最高有效位为0时

                (AH)=FFH 当(AL)的最高有效位为1时

指令对标志位的影响:不影响标志位

指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。

 

字扩展为双字 CWD (convert word to double word)

 

指令的汇编格式:CWD

指令的基本功能:(DX)=0000H 当(AX)的最高有效位为0时

                (DX)=FFFFH 当(AX)的最高有效位为1时

指令对标志位的影响:不影响标志位

指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

循环指令

 

循环 LOOP (loop)

指令的汇编格式:LOOP label

指令的基本功能:① (CX)←(CX)-1

         ② 若(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。

指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的-128 ~ +127字节范围之内。

 

为零/相等时循环 LOOPZ/LOOPE (loop while nonzero or equal)

指令的汇编格式:LOOPNZ/LOOPNE label

指令的基本功能:① (CX)←(CX)-1

         ② 若ZF=1且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。

指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的-128 ~ +127字节范围之内。

 

不为零/不相等时循环 LOOPNZ/LOOPNE (loop while nonzero or not equal)

指令的汇编格式:LOOPNZ/LOOPNE label

指令的基本功能:① (CX)←(CX)-1

         ② 若ZF=0且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。

指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的-128 ~ +127字节范围之内。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

响铃的ASCII码为07

抱歉!评论已关闭.