分支与循环
二、循环程序设计 当要重复某些操作时,就应考虑使用循环。 循环通常由四部分组成: (1)初始化部分;(2)循环体部 分;(3)调整部分(有时也可以看成时循环体的一部分,通常 位于循环体首部或尾部);(4)控制部分。 各部分之间的关系如下(DO_UNTIL、DO_WHILE结构):
1.在所定义的字节数组中找出第一个非0数据,并显示输出其 所在的数组的下标。 DATA SEGMENT ARRAY DB 0 , 0 , 0 , 16 , 0 , 88 , 72 COUNT EQU $ - ARRAY DATA ENDS CODE SEGMENT ASSUME CS:CODE , DS : DATA START: MOV AX , DATAS MOV DS , AX
三、综合应用 有一个首地址为A的N字数组,请编制程序使该数组中的数按 照从大到小的次序排列(冒泡排序法)。
…… MOV CX, N DEC CX LOOP1: MOV DI , CX MOV BX , 0 LOOP2: MOV AX , A[BX] CMP AX , A[BX + 2] JGE CONTINUE XCHG AX , A[BX + 2] MOV A[BX] , AX CONTINUE: ADD BX , 2 LOOP LOOP2 MOV CX , DI LOOP LOOP1 …… ;LOOP2会改变CX内容,所以先保存
2.设有三个单元的字节无符号数存放在BUFFER开始的缓冲区 中,写一个能将它们按大到小重新排列的程序。 DATAS SEGMENT BUFFER DB 87 , 234 , 123 DATAS ENDS CODES SEGMENT ASSUME CS:CODES , DS : DATAS START: MOV AX , DATAS MOV DS , AX MOV SI , OFFSET BUFFER MOV AL , [SI] MOV BL , [SI + 1] MOV CL , [SI + 2]
本章学习要点: (1)掌握分支与循环程序的结构 (2)理解汇编程序编程思想 一、分支程序设计 分支程序的基本结构如下图:
分别对应高级语言中的if语句、if-else语句和case语句; 在汇编语言中,一般利用条件测试指令和条件转移指令等实现 分支。
1.比较两个无符号数的大小,把大数存入MAX单元。 DATA SEGMENT SOURCE DB X1 , X2 MAX DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE , DS : DATA MOV AX , DATA MOV DS , AX MOV AL , SOURCE CMP AL , SOURCE + 1 JNC ONE ;CF=0无借位,等同于JAE,JNB MOV AL , SOURCE + 1 ONE: MOV MAX , AL CODE ENDS END
MOV CX , COUNT;初始化部分 MOV DI , -1 ;初始化部分 AGAIN: INC DI ;循环体调整部分 CMP ARRAY[DI] , 0;控制部分 LOOPZ AGAIN ;控制部分 MOV DX , DI DISPLAY:ADD DL , 30H MOV AH , 02H INT 21H MOV AH , 4CH INT 21H CODE ENDS END START
ቤተ መጻሕፍቲ ባይዱ
MOV SI , OFFSET STR ;初始化 AGAIN: MOV AL , [SI] ; OR AL , AL ;循环控制,0 OR 0=0 JZ WORKOVER ;循环控制 CMP AL , ‘A’ ;循环体 JB NEXT ; CMP AL , ‘Z’ ; JA NEXT ; ADD AL , 20H ; MOV [SI] , AL ;循环体 NEXT: INC SI ;调整 JMP AGAIN ;整个循环均由跳转指令完成! WORKOVER:……. CODE ENDS END START
2.把一个字符串中所有的大写字母改为小写字母,设字符串以 0结尾。 DATA SEGMENT STR DB ‘HOW are yoU!’ , 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE , DS : DATA START: MOV AX , DATAS MOV DS , AX
CMP AL , BL JAE NEXT1 XCHG AL , BL NEXT1: CMP AL , CL JAE NEXT2 XCHG AL , CL NEXT2: CMP BL , CL JAE NEXT3 XCHG BL , CL NEXT3: MOV [SI] , AL MOV [SI + 1] , BL MOV [SI + 2] , CL …… CODES ENDS END START