lec12 循环程序设计.pptVIP

  • 2
  • 0
  • 约3.11千字
  • 约 16页
  • 2019-12-02 发布于湖北
  • 举报
第 12 讲 循环程序设计 循环结构也称“重复结构”,一般由以下4个部分组成: (1)初始化部分:为循环做准备。 如:累加器清零,设置地址指针和计数器的初始值等。 (2)工作部分:实现循环的基本操作。 (3)修改部分:修改指针、计数器的值,为下一次循环做准备。 (4)控制部分:判断循环条件,确定结束或继续循环。 两种结构的循环: WHILE循环:先判断循环条件,条件满足则进入循环,循环次数最少为0次。 DO-WHILE循环:先执行工作部分,然后判断循环条件,条件满足则转向工作部分继续循环,循环次数最少1次。 计数循环:循环的次数事先已知,用一个变量(寄存器或存储 器单元)记录循环的次数(称为“循环计数器”)。 条件循环:循环的次数事先并不确定,根据某个条件是否满足 来决定是否继续循环。 按照循环结束的条件,有以下两类循环: 用循环计数器的值来控制循环,也可以结合其它条件共同控制。 1. 计数循环 [例4-8] 从键盘上输入一个字符串(不超过80个字符),将它逆序后输出。 DATA SEGMENT BUFFER DB 81, ?, 81 DUP(?) MESS DB 0AH, 0DH, “Input a string please : ” 0AH, 0DH, “$” DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX LEA DX, MESS MOV AH, 09H INT 21H ; 输出提示信息 MOV AH, 0AH LEA DX, BUFFER INT 21H ; 输入字符串 LEA BX, BUFFER ; 缓冲区首地址送BX MOV CL, BUFFER+1 MOV CH, 0 ; 输入字符个数送CX(循环次数) ADD BX, CX INC BX ; 计算字符串末地址送BX(指针) DISP: MOV DL, [BX] MOV AH, 02H INT 21H ; 逆序输出一个字符 DEC BX ; 修改指针 LOOP DISP ; 计数循环 MOV AX, 4C00H INT 21H CODE ENDS END START 2. 条件循环 DATA SEGMENT STRING DB “A string for testing . ”, 0 LENTH DW ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START:MOV AX, DATA MOV DS, AX [例4-12] 字符串STRING以代码0结束,求这个字符串的长度(字符个数)。 LEA SI, STRING ;装载字符串指针 MOV CX, 0 ;设置计数器初值 TST: CMP BYTE PTR [SI], 0;比较 JE DONE ;字符串结束,转向DONE保存结果 INC SI ;修改指针 INC CX ;计数 JMP TST ;转向TST,继续循环 DONE: MOV LENTH, CX ;保存结果 MOV AX, 4C00H INT 21H CODE ENDS END START …… LEA SI, STRING-1 ;装载字符串指针 MOV CX, -1 ;装载计数器初值 TST: INC SI ;修改指针 INC CX ;计数 CMP BYTE PTR [SI], 0 ;比较 JNE TST ;未结束,转TST继续循环 MOV LENTH, CX ;字符串结束,保存结果 …… 比较一下,您喜欢这种风格吗? …… TST: CMP BYTE PTR [SI], 0 ;比较 INC SI ;修改指针 INC CX ;计数 JNE TST ;转向TST,继续循环 …… 错在哪里?运行结果会怎样? DATA SEGMENT ARRAY DW 1, 2, 3, 4, 5, 6, -1 AVRG DW ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA BX, ARRAY ;装载数组指针 XOR CX, CX ;设置计数器初值 XOR DX, DX XOR AX, AX ;清累加器 [例4-13] 一维无符号字数组ARRAY以-1作为数组结束标志,

文档评论(0)

1亿VIP精品文档

相关文档