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

;试编写一程序,要求能从键盘接收一个个位数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

你可能感兴趣的:(汇编)