双重循环打印ASCII的10H到FFH

该程序涉及到双重循环,这里考察到循环时对CX寄存器的压栈以及出栈,首先写出外部循环,并对CX寄存器赋值之后,写出相应的操作,当写内部循环的时候,也是需要为CX寄存器赋值,如果不进行保护,则会覆盖外部循环的CX寄存器的值,这里就需要保护外部循环的相关数据(这里相关数据的意思就是外部循环中用到的寄存器的内容,在内部循环之中也有用到),所以要通过PUSH压进栈保护起来,例如,PUSH CX ,则可以对CX寄存器重新赋值,书写到内部循环之中,当内部循环结束之后,POP CX,将保护的CX寄存器的值弹出栈,这里的CX寄存器中的值,就是之前保护起来之前的值,运用PUSH,POP指令值书写多重循环的关键

DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
   	
	MOV DX,0000H ;将DX,CX初始化
	MOV CX,0000H
	MOV DL,10H ;打印从10H到FFH的ASCII码(保存第一个要打印的ASCII码)
	
	MOV CX,000FH ;外层循环(行数)
LOOP_WAI:
	PUSH CX ;保存外循环的次数
	MOV CX,0010H ;内层循环次数,就是列数
	MOV AH,02H

LOOP_NEI:
	INT 21H ;打印ascll
	PUSH DX ;这里为了美观打印空格,要为DL赋值,则需要将DX内容保护起来
	MOV DL,00H
	INT 21H ;输出空格
	
	POP DX
	INC DX ;使DX的内容自加1
	LOOP LOOP_NEI
	;此时这里已经进行完一次内循环
	
	POP CX ;弹出之前保存起来的外部循环的次数
	PUSH DX ;保存DX,因为要打印出换行
	MOV DL,0DH
	INT 21H
	MOV DL,0AH
	INT 21H
	
	POP DX ;打印完毕之后弹出保护起来得DX
	LOOP LOOP_WAI
   	
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START


上述源代码中注释已经清楚了,希望对你有所帮助
这就是运行结果:


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值