汇编语言-------从键盘接收一个无符号数 N,然后响铃 N 次

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxxjxw/article/details/85058191

微机原理课程上机实验之一

题目:

      试编写一程序,要求从键盘接收一个无符号数 N,然后响铃 N 次(响铃的 ASCII 码为 07H):
     1)N 为一位数;
     2)N 为两位数。

     已经在DOSBOX/Emu8086 下正确运行过了

     详见注释

CODES SEGMENT 
	;ASSUME CS:CODES,DS:DATA 
	ASSUME CS:CODES
START: 
	call getInt
	mov cl,al
lp: 
	;mov DL,'7' ;准备响铃
	mov DL,07H ;准备响铃
	mov AH,02H ;显示一个字符的DOS调用,实际为响铃
	INT 21H
	LOOP lp	
	mov	ah,4CH
	int 21H
	;没有退出,应用程序就退不到操作系统
getInt: 
    push BX  ;保护现场
    push DX 
    push CX 
       ;此处不能pushf,因为flags是返回值
    mov AX,0 ;初始化 
    mov BX,0
    mov CX,0
	mov DX,0
getInt_XUNHUAN:
    mov AH ,01H
    int 21H ; 输入一个字符,一定存储在 AL 中
    cmp  AL,0DH ; 判断回车符 
    jz  getInt_RESULT ;    zf=0 判断是回车
    cmp  AL,30H
    jb   getInt_XUNHUAN  ; < 0
    cmp  AL,39H ;<= 9 && > 0
    jbe  getInt_SUM_TO_AX   
    jmp  getInt_XUNHUAN ;继续循环 
getInt_SUM_TO_AX: 
    mov AH,0 ;清除 AX 高位
    push AX  ;保存 AX
    mov AX,CX  ;将原先的值乘以 10 ,实质上乘起来的值放在了 CX 中 
    mov BX,10
        ;如果参数是字节,将把 AL 做乘数, 结果放在 AX
        ;如果参数是字 , 将把 AX 做乘数, 结果放在 DX:AX
    mul BX 
    mov DX,0
    mov CX,AX 
	pop AX
    sub AL,30H
    add CX,AX 
    jmp  getInt_XUNHUAN    
getInt_RESULT:
    mov AX,CX
    pop BX  ;恢复现场
    pop DX 
    pop CX
    ret  
CODES ENDS 
	END START

猜你喜欢

转载自blog.csdn.net/hxxjxw/article/details/85058191