1.统计一个字形数组中负数元素个数
.486
DATA SEGMENT
ARRAY DW 54,-1050,-448,0,6800,-853
COUNT EQU $-ARRAY;统计占用的空间
RESULT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARRAY;指针初始化
MOV CX,COUNT/2;统计数据的个数存入CX
CLD
MOV DX,0
LL: LODSW;取数到AX中
BT AX,15
JNC NEXT;判断是否为负数
INC DX;计数器加1
NEXT: LOOP LL
MOV RESULT,DX
MOV AH,4CH
INT 21H
CODE ENDS
END START
2.排序
DATA SEGMENT
BLOCK DB 22H,55H,11H,78H;n取4
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA BX,BLOCK;外循环指针初始化
MOV CX,3;外循环计数器初始化
LP1: MOV SI,BX;内循环指针初始化
MOV DX,CX;内循环计数器初始化
MOV AL,[SI]
LP2: CMP AL,[SI+1]
JGE LP3
XCHG AL,[SI+1]
LP3: INC SI;修改内循环指针
DEC DX
JNZ LP2
MOV [BX],AL;存大数
INC BX;修改内循环指针
LOOP LP1
MOV AH,4CH
INT 21H
CODE ENDS
END START
3.校验并统计
DATA SEGMENT
STRN DB 'HLFHAL$'
COUNT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DL,0;计数器清零
LEA SI,STRN;指针初始化
LL: LODSB;读入一个数,SI后移
CMP AL,'$';判断是否结束
JE EXIT;遇到结束符退出
JP LL;不需校验转下一个
OR AL,80H;加校验位
MOV [SI-1],AL;将校验完的值存回去
INC DL;计数器加1
JMP LL
EXIT: MOV COUNT,DL;存结果
ADD DL,30H
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
4.查找
DATA SEGMENT
FIRST DB 12H,44H,65H,3H,0H
N DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,0;计数器清零
MOV CX,5;设置循环次数
LEA SI,FIRST;指针初始化
LL: MOV AL,[SI];取数
INC SI;修改指针
CMP AL,0;与0比较
JE EXIT;退出
INC DX;计数器加1
LOOP LL
EXIT: MOV N,DX;存结果
MOV AH,4CH
INT 21H
CODE ENDS
END START