;搜索数组,看是否存在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