;在以BUF为首地址的字存储区中存放有N个无符号数,试统计低3位全为1的数的个数(个数设为≤9),并显示。
DATA SEGMENT
OUTPUT DB 'number of low 3 bit:',0DH,0AH,'$'
BUF DW 15,7,15,11FFH
N=$-BUF
BUF1 DW N DUP(?)
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
MOV BX,0
MOV SI,0
LOP: MOV AX,BUF[BX]
MOV DX,AX
AND DL,0FH
MOV CX,3
LP:SHR DL,1;向右移位三次,判断最低三位是否是1
JNC NEXT
LOOP LP
MOV BUF1[SI],AX ;存储到BUF1数据单元
ADD SI,2
NEXT:ADD BX,2
CMP BX,N
JNZ LOP
LEA DX,OUTPUT;显示number of low 3 bit:
MOV AH,9
INT 21H
MOV AX,SI
MOV DL,2;把SI除以2,显示满足要求的个数
DIV DL
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
MOV DL,0DH;回车
INT 21H
MOV DL,0AH;换行
INT 21H
DIS: MOV AX,BUF1[SI];循环显示找到的数,倒着显示
ADD AX,30H
MOV DX,AX
MOV AH,2
INT 21H
SUB SI,2;向前移动一个字单位
CMP SI,0
JAE DIS
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
;跑出来的结果让人好奇怪!!
DATA SEGMENT
OUTPUT DB 'number of low 3 bit:',0DH,0AH,'$'
BUF DW 15,7,15,11FFH
N=$-BUF
BUF1 DW N DUP(?)
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
MOV BX,0
MOV SI,0
LOP: MOV AX,BUF[BX]
MOV DX,AX
AND DL,0FH
MOV CX,3
LP:SHR DL,1;向右移位三次,判断最低三位是否是1
JNC NEXT
LOOP LP
MOV BUF1[SI],AX ;存储到BUF1数据单元
ADD SI,2
NEXT:ADD BX,2
CMP BX,N
JNZ LOP
LEA DX,OUTPUT;显示number of low 3 bit:
MOV AH,9
INT 21H
MOV AX,SI
MOV DL,2;把SI除以2,显示满足要求的个数
DIV DL
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
MOV DL,0DH;回车
INT 21H
MOV DL,0AH;换行
INT 21H
DIS: MOV AX,BUF1[SI];循环显示找到的数,倒着显示
ADD AX,30H
MOV DX,AX
MOV AH,2
INT 21H
SUB SI,2;向前移动一个字单位
CMP SI,0
JAE DIS
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
;跑出来的结果让人好奇怪!!