汇编

已知在数据段DATA中,以BUF为首址的字存储区中存放着NUM(要求不少于20)个带符号数,试编写程序,将正数送到ARRAY为首址的存储区中,将负数送到TABLE为首址的存储区中,并分别统计正数和负数的个数,存放在COUNT(正)和NUMBER(负)单元中。并把正负数统计结果在屏幕上以十进制方式输出。

DATA SEGMENT 				;数据段定义
   STRING1   DB  'COUNT=','$'
   STRING2    DB   0DH, 0AH, 'NUMBER=','$'
   BUF DW 1,3,4,-1,-599,98,72,36,45,190,-900,-982,123,12,45,52,78,-10,-1
   COUNT1 EQU ($-BUF)/2   ;注意是字,所以除以2 
   ARRAY DW 20 DUP('$')
   TABLE DW 20 DUP('$')
   COUNT DW 0
   NUMBER DW 0
DATA ENDS 

STACK SEGMENT STACK
    DW 20 DUP(0)
STACK ENDS

CODE SEGMENT
    ASSUME DS:DATA,CS:CODE
START:
    MOV DX,DATA
    MOV DS,DX
    
    LEA SI,BUF
    LEA DI,TABLE
    LEA BX,ARRAY
MOV CX,COUNT1
LOP:
    MOV AX,[SI]
    SHL AX,1 
    JNC ARRAY1
    
    MOV  DX,[SI]            ;小于0操作
    MOV [DI],DX
    ADD NUMBER,1
    INC DI
    INC DI
    JMP NEXT

ARRAY1:                     ;大于0操作
    MOV  DX,[SI] 
    MOV [BX],DX
    ADD COUNT,1
    INC BX
    INC BX

NEXT:
    INC SI
    INC SI
    LOOP LOP
    JMP STOP
    
STOP:
    LEA  DX, STRING1        ;输出"COUNT= "字符
    MOV  AH, 09H  
    INT  21H 
      
    MOV  AX, COUNT         
    CALL CONVERT            ;调用 
    
    LEA  DX, STRING2        ;输出"NUMBER= "字符 
    MOV  AH, 09H 
    INT  21H
      
    MOV  AX, NUMBER    
    CALL CONVERT
      
    MOV AH,4CH
    INT 21H 

;十进制输出程序    
CONVERT PROC NEAR    
    PUSH  AX                
    PUSH  BX    
    PUSH  CX   
    PUSH  DX     
    MOV   BX, 10       
    MOV   CX, 0             
    
LOP1: 
    MOV  DX, 0              ; 压栈      
    DIV  BX                 
    PUSH DX                 
    INC  CX      
    CMP   AX, 0      
    JZ    LOP2                
    JMP   LOP1                 
LOP2:  
    POP   DX                ;出栈
    ADD   DL, 30H                 
    MOV   AH, 02H         
    INT   21H     
    LOOP  LOP2     
    POP  AX                       
    POP  BX      
    POP  CX      
    POP  DX   
    RET
    
CONVERT ENDP 

CODE ENDS
END START

用的软件是emu8086

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值