;搜索数组,看是否存在CONST DATA SEGMENT ARRAYB DB 2,3,1,8,7FH,-5 COUNT EQU $-ARRAYB ;数组长度 CONST EQU 7FH ;判断数组中是否存在此元素 ADDRES DD 0 ;若存在,存放元素的地址 SCANTIME DW 0 ;若存在,存放搜索次数 DATA ENDS STACK SEGMENT DW 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE MAIN: MOV AX,DATA MOV DS,AX MOV ES,AX ;目的串的段基址总是存放在ES LEA DI,ARRAYB;目的串的偏移首地址存在DI/EDI MOV CX,COUNT;设置循环次数 MOV AL,CONST;数组元素与AL的内容比较 CLD ;设置DF标志位 OR CX,CX ;设置ZF=0 REPNE SCASB ;若果不相等,则继续搜索 JZ SCANED ;ZF==1表示找到相等的元素 JMP @F ;没找到相等的元素 SCANED:DEC DI MOV WORD PTR ADDRES,DI MOV WORD PTR ADDRES+2,ES;把元素地址存入ADDRES MOV BX,OFFSET ARRAYB INC DI SUB DI,BX MOV SCANTIME,DI;计算搜索次数 MOV DX,SCANTIME ADD DX,30H MOV AH,2 INT 21H @@: MOV AH,4CH INT 21H CODE ENDS END MAIN
;将ES段中名为BLOCK的字存储区清零. DATA SEGMENT BLOCK DW 5 DUP(1) DATA ENDS STACK SEGMENT DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN: MOV AX,DATA MOV DS,AX MOV AX,SEG BLOCK MOV ES,AX MOV DI,0 MOV CX,LENGTH BLOCK GOON: MOV BLOCK[DI],0 ADD DI,TYPE BLOCK LOOP GOON MOV AX,4C00H INT 21H CODE ENDS END MAIN
;求Z=|X-Y|.其中X,Y均为无符号数 DATA SEGMENT X DW 5 Y DW 9 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE MAIN: MOV AX,DATA MOV DS,AX MOV AX,X SUB AX,Y JC NEXT JMP DONE NEXT:NEG AX DONE:MOV DX,AX ADD DX,30H MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END MAIN
;求X与Y之和并送Z DATA SEGMENT ;X DW 0E98AH,80AFH,0FD32H,0F68FH ;Y DW 9FD0H,70BAH,3D84H,89FEH X DW 3 ;为了显示结果,把变量值改为3和5 Y DW 5 Z DW 5 DUP(?) DATA ENDS STACK SEGMENT PARA STACK 'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA MAIN: MOV AX,DATA MOV DS,AX SUB DI,DI MOV CX,1 CLC GOON:MOV AX,X[DI] ADC AX,Y[DI] MOV Z[DI],AX ADD DI,2 LOOP GOON RCL AX,1 AND AX,1 MOV Z[DI],AX ;显示结果 MOV DL,BYTE PTR Z ADD DL,30H MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END MAIN
;输入字符串,然后显示输入的字符串 DATA SEGMENT BUF DB 50 DB ? DB 50 DUP('$');总长度为52 CR EQU 0DH LF EQU 0AH MESG1 DB 'PLEASE INPUT A STRING:',CR,LF,'$' DATA ENDS STACK SEGMENT DW 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE MAIN: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESG1 MOV AH,9 INT 21H;提示输入 LEA DX,BUF MOV AH,10 INT 21H ;等待输入 MOV DL,LF MOV AH,2 INT 21H;输出换行 LEA DX,BUF+2 MOV AH,9 INT 21H;输出字符串 MOV AH,4CH INT 21H CODE ENDS END MAIN
;删除输入字符串中的'A'字符,然后输出删除后的字符串。 ;若字符串中不存在'A',则输出'NOT FOUND' DATA SEGMENT BUF DB 50,?,50 DUP('$') MESSAGE DB 'NOT FOUND',0AH,'$' FLAG DB 0 DATA ENDS STACK SEGMENT DW 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE MAIN: MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,10 INT 21H;读入字符串 MOV DL,0AH MOV AH,2 INT 21H;输出换行符 MOV AX,DATA MOV ES,AX;段地址存入ES LEA DI,BUF;偏移首地址 MOV AL,'A';与'A'比较 MOV CX,WORD PTR BUF[1];循环次数 CLD;设置DF标志位0 GOON: OR CX,CX;设置ZF=0 CMP [BUF+DI],AL JNZ NEXT;如果不同,进入下一次循环 MOV [BUF+DI],'0' INC FLAG[0] NEXT:INC DI LOOP GOON OR CX,1 CMP FLAG[0],1 JNZ MES LEA DX,MESSAGE MOV AH,9 INT 21H;没找到时输出NOT FOUND JMP DONE MES:MOV CL,[BUF+1] MOV DI,OFFSET BUF+2 SIGN:OR CX,CX CLD MOV DL,[BUF+DI] CMP DL,'0';是0的话不输出 JZ NO; MOV AH,2 INT 21H NO: INC DI LOOP SIGN;输出字符串 DONE:MOV AH,4CH INT 21H CODE ENDS END MAIN
;对395872843948这些0--9的数字进行冒泡排序 DATA SEGMENT ARRAY DB '395872843948',0DH,0AH,'$' DATA ENDS STACK SEGMENT DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA MAIN: MOV AX,DATA MOV ES,AX MOV DS,AX MOV CX,12;要比较的次数 MOV BX,12;每次要比较的个数 INIT: MOV DI,0 ;偏移首地址 MOV BX,CX GOON: MOV AL,ARRAY[DI] CMP AL,ARRAY[DI+1] JG NEXT XCHG AL,ARRAY[DI+1] MOV ARRAY[DI],AL;交换 NEXT:INC DI DEC BX JNZ GOON;不相等 LOOP INIT;完成一趟排序 MOV DX,OFFSET ARRAY MOV AH,9 INT 21H;输出排好序的序列 MOV AH,4CH INT 21H CODE ENDS END MAIN