汇编语言,从一个数组中找出所有奇数

2025-02-26 05:57:40
推荐回答(1个)
回答1:


       DATAS  SEGMENT
       ARRAY  DW        1234,2345,5678,7890,3455,1233,0ABCDH,0FFFFH
          N1  DW        ($-ARRAY)/2
      NUMBER  DW        ($-ARRAY)/2 DUP(?)
          N2  DW        0
       DATAS  ENDS
       
       CODES  SEGMENT
              ASSUME    CS:CODES,DS:DATAS
      START:  MOV       AX,DATAS
              MOV       DS,AX
              ; 查找奇数              
              LEA       SI,ARRAY
              LEA       DI,NUMBER
              MOV       CX,N1
         @1:
              MOV       AX,[SI]
              MOV       BX,AX
              SHR       BX,1
              JC        @2
              JMP       @3
         @2:
              MOV       [DI],AX
              INC       WORD PTR N2
              ADD       DI,2
         @3:
              ADD       SI,2
              LOOP      @1
              ; 输出奇数 
              LEA       SI,NUMBER
              MOV       CX,N2
         @4:
              LODSW
              CALL      DISPAX
              LOOP      @4
              
              MOV       AX,4C00H
              INT       21H
;==============================================
      DISPAX  PROC      NEAR
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              PUSH      DS
              PUSH      AX
              MOV       AH,2
              MOV       DL,' '
              INT       21H
              POP       AX
              PUSH      CS
              POP       DS
              MOV       BYTE PTR NZ,0
              PUSH      AX
              LEA       SI,DIVARR
              MOV       CX,5
        @@1:
              POP       AX
              MOV       DX,0
              MOV       BX,[SI]
              DIV       BX
              PUSH      DX
              CMP       AL,0
              JNE       @@2
              CMP       BYTE PTR NZ,1
              JE        @@2
              CMP       CX,1
              JE        @@2
              MOV       DL,20H
              JMP       @@3
        @@2:
              ADD       AL,30H
              MOV       DL,AL
              MOV       BYTE PTR NZ,1
        @@3:
              MOV       AH,2
              INT       21H
              INC       SI
              INC       SI
              LOOP      @@1
              POP       DX
              POP       DS
              POP       SI
              POP       DX
              POP       CX
              POP       BX
              RET
      DIVARR  DW        10000,1000,100,10,1
          NZ  DB        0
      DISPAX  ENDP
;=============================================                    
       CODES  ENDS
              END       START