📄 6.asm
字号:
;第6题
;
; 将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,
; 并在屏幕上显示正数和负数的个数
;
;
DATA SEGMENT
NUMBER DB -20,30,13,-9,-4,2,6,7 ;要分类的数据
N EQU $-NUMBER ;数据个数
POSV DB 10 DUP(?) ;存储正数
POSCOUNT DB 0 ;存储负数
NEGV DB 10 DUP(?)
NEGCOUNT DB 0
MES1 DB 'The counts of positive is:$'
MES2 DB 'The counts of negtive is:$'
return1 db 13,10,'$' ;换行命令
DATA ENDS
STACK1 SEGMENT STACK
DW 10 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1,ES:DATA
START:
MOV AX,DATA ;初始化
MOV DS,AX
MOV ES,AX
XOR AX,AX
XOR CX,CX
XOR BX,BX
XOR DX,DX
MOV CL,N ;读入记数个数
MOV SI,OFFSET NUMBER ;数列地址
NEXT:
MOV AL,[SI]
TEST AL,80H ;测试最高位是否为1,是则为负数,否则为正数
JZ POS ;相等为正常
MOV BL,DL
MOV DI,OFFSET NEGV ;储存负数的偏偏移地址
MOV [DI+BX],AL
INC DL ;负数总数加1
JMP LOOPNEXT
POS:
MOV BL,DH
MOV DI,OFFSET POSV
MOV [DI+BX],AL
INC DH ;正数总数加1
LOOPNEXT:
INC SI
LOOP NEXT
MOV SI,OFFSET NEGCOUNT
MOV [SI],DL ;存入负数总数值
MOV SI,OFFSET POSCOUNT
MOV [SI],DH ;存入正数总数值
MOV DX,OFFSET MES1 ;显示正数个数
MOV AH,9
INT 21H
MOV SI,OFFSET POSCOUNT
MOV DL,[SI]
ADD DL,30H
MOV AH,2
INT 21H
MOV DX,OFFSET return1 ;换行
MOV AH,9
INT 21H
MOV DX,OFFSET MES2 ;显示负数个数
MOV AH,9
INT 21H
MOV SI,OFFSET NEGCOUNT
MOV DL,[SI]
ADD DL,30H
MOV AH,2
INT 21H
MOV AH,4CH ;正常结束
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -