目录
LOOP指令(重点掌握)
LOOPZ/LOOPE指令
LOOPNZ/LOOPNE指令
例题
一:读程序写结果
二:阅读程序段回答问题
三:读程序写结果
四:求100内的数累和
五:统计正数负数零
六:求字节单元中最大的数送MAX单元
七:统计键盘输入的大写字母个数
LOOP指令(重点掌握)
先减1,判断是不是为零。为零就退出
特殊的情况CX的初值是0。问这个程序执行多少次
0-1=0FFFFH=65535
在加上刚开始就执行的一次,所以一共执行65536次。也就是初值为零执行次数最多
和8253也是初值为零,计数的值最大
LOOPZ/LOOPE指令
循环继续的条件有两个
可能会提前退出
CMP A,B 两数不相等,就退出了 ZF=1
使用的地方,比较两块内存单元的存的内容是否相同
LOOPNZ/LOOPNE指令
用处:从一个字符串里找是否存在一个字母
例题
一:读程序写结果
BLK1 db 36,84,34,-3,20,122,73 MOV CX,7 LEA SI,BLK1 NEXT : MOV AL,[SI] INT SI TEST AL,01H LOOPZ NEXT MOV BL,[SI]
问AL=(-3) BL=(20)
二:阅读程序段回答问题
执行程序后AX= (110) BX=(22),该程序的功能是(20之内偶数累和)
1:DTA1的后五个单元赋值给DAT2后五个单元
2:DAT1+4
三:读程序写结果
AL=00H SI=1009H CX=00H
四:求100内的数累和
DATA SEGMENT SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATAXX START: MOV AX,DATA MOV DS,AX MOV AX,0 MOV CX,100 NEXT: ADD AX,CX LOOP NEXT MOV SUM,AX EXIT: MOV AH,4CH INT 21H CODE ENDS END START
五:统计正数负数零
内存中有10个数,统计正数,负数和零的个数,放
PLUS,NEGO,ZERO三个内存单元
DATA SEGMENT MEN DB 1,2,3,4,5,6,7,8,0,10 PLUS DB 0 ZERO DB 0 NEGO DB O DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATAXX START: MOV AX,DATA MOV DS,AX MOV CX,10;计数初值 MOV SI,OFFSET MEN;获取地址指针 NEXT: MOV AL,[SI];送数据 CMP AL,0;和零比较 JG P1;大于零是整数跳转 JZ Z1;等于0跳转 INC NEGO JMP LOP1; P1: INC PLUS JAM LOP1 Z1: INC ZERO LOP1: ;保证一个出口 INC SI;修改指针的值 LOOP NEXT;继续循环 EXIT: MOV AH,4CH INT 21H CODE ENDS END START
六:求字节单元中最大的数送MAX单元
;默认采用ML6.11汇编程序 DATAS SEGMENT MEM DB 1,2,3,4,5,6,7,11,44,8 MAX DB ? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV CX,9 MOV SI,OFFSET MEN NEXT: MOV AL,[SI] CMP AL,[SI+1] JG G1 MOV AL,[SI+1];保证AL里面存的是最大的 G1: INC SI LOOP NEXT MOV MAX,AL EXIT: MOV AH,4CH INT 21H CODES ENDS END START
七:统计键盘输入的大写字母个数
;统计键盘输入的大写字母个数 DATAS SEGMENT DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BL,0 NEXT: MOV AH,1 INT 21H CMP AL,0DH;先判断是不是回车 JZ NEXT1 CMP AL,41H JB NEXT CMP AL,5AH JA NEXT INC BL JMP NEXT NEXT1: MOV DL,BL ADD DL,30H MOV AH,2 INT 21H EXIT: MOV AH,4CH INT 21H CODES ENDS END START