⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6.asm

📁 微机原理与接口技术的部分课后题(十几题经典的)程序
💻 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 + -