首先我们知道loop指令用于实现一层循环,CX寄存器存储其循环次数
按照我的步骤,我一定不会满足单单一层循环,
于是我在loop指令里面 套了一个loop指令,
结果不言而喻,产生了一个无限死循环。这自然不是我要的结果。
经过我的debug与猜测,发现是
一层循环计数寄存器CX的值被二层的覆盖了
自然不能简单的套loop了,
而后在学习函数调用时阅读到这样两个与栈有关的指令
push
pop
作用是保存一个值到栈,很通用的方法
于是·解决方法就出来了:
使用push将一层循环的CX保存起来再将二层循环的次数PUSH放到CX中,二层循环完后,再将栈中的CX pop还原到一层循环。OK
二层循环就是折磨简单。
关键代码示例:
实现一个三角形的输出:
row,col为三角形的行与列
print_J是输出#号的函数(过程)
过程的定义:
1.默认使用near近调用参数,若修改,必须使用方式2指定
2.一定要用RET,强制返回
方式1:
NAME:
;DOSOMETHING
RET
方式2:
NAME PROC [FAR/NEAR];二选一
;DOSOMETHING
RET
NAME ENDP
print_J:
;输出#
LEA DX,jinhao;jinhao为自定义变量“#$”
MOV AH,09h
INT 21h
RET
循环:
MOV CX,row
st1:
PUSH CX
MOV CX,col
st2:
CALL print_J
LOOP st2
;换行
MOV DL,0ah
MOV AH,02h
INT 21h
;列加一
ADD col,1
POP CX
LOOP st1
编译连接运行效果如下:
坚持就是胜利!奥利给!!
版权声明:本文为thebestway原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。