微机原理汇编语言求原程序,题目如下

微机原理汇编语言求原程序,题目如下在内存地址为BUFF开始的单元定义了100个字节。编一程序要求完成填充这100个字节为自1开始的自然数。并将累加和的结果存于X单元,统计出素数个数和素数的累加和,分别存于Y单元和Z单元。在屏幕上以二进制形式显示素数个数。

第1个回答  2018-09-14
        CODE  SEGMENT
              ASSUME    CS:CODE
        BUFF  DB        100 DUP(?)
           N  EQU       $-BUFF
           X  DW        0
           Y  DW        0
           Z  DW        0
 
      START:  PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              LEA       DI,BUFF
              MOV       AL,1
              MOV       CX,N
              CLD
         @1:
              STOSB
              INC       AL
              LOOP      @1
 
              LEA       SI,BUFF
              MOV       CX,N
              CLD
         @2:
              LODSB
              CBW
              ADD       X,AX
              MOV       BX,    AX
              CALL      F
              CMP       AX,0
              JE        @3
              INC       Y
              ADD       Z,BX
              MOV       AX,BX
              CALL      DSPAX
         @3:
              LOOP      @2
              CALL      LFCR
 
              MOV       AX,Y
              CALL      DSPAX2
              CALL      LFCR
              
              MOV       AX,Z
              CALL      DSPAX
              CALL      LFCR
              
              MOV       AX,X
              CALL      DSPAX
              MOV       AH,4CH
              INT       21H
               
;====================================
; 要判断的数放入ax中
; ax返回1时表示是素数
; ax返回0时表示是合数
           F  PROC      NEAR
              PUSH      BX
              PUSH      DX
              JMP       F1
         @@X  DW        ?
        @@X2  DW        ?
         F1:  CMP       AX,1
              JZ        F2
              CMP       AX,2
              JZ        F11
              CMP       AX,3
              JZ        F11
              MOV       @@X,AX
              SHR       AX,1
              MOV       @@X2,AX
              MOV       BX,2
        FLP:  MOV       DX,0
              MOV       AX,@@X
              DIV       BX
              CMP       DX,0
              JZ        F2
              INC       BX
              CMP       BX,@@X2
              JBE       FLP
        F11:  MOV       AX,1
              POP       DX
              POP       BX
              RET
         F2:  MOV       AX,0
              POP       DX
              POP       BX
              RET
           F  ENDP
;=================================
      DSPAXS  PROC      NEAR
              PUSH      AX
              TEST      AX,8000H
              JNS       @DSPAXS1
              PUSH      AX
              PUSH      DX
              MOV       AH,2
              MOV       DL,'-'
              INT       21H
              POP       DX
              POP       AX
              NEG       AX
   @DSPAXS1:
              CALL      DSPAX
              POP       AX
              RET
      DSPAXS  ENDP
;=============================== 
       DSPAX  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSHF
              XOR       CX,CX
              MOV       BX,10
    @DSPAX1:
              XOR       DX,DX
              DIV       BX
              INC       CX
              OR        DX,30H
              PUSH      DX
              CMP       AX,0
              JNE       @DSPAX1
              MOV       AH,2
   @DISPAX2:
              POP       DX
              INT       21H
              LOOP      @DISPAX2
              MOV       DL,32
              INT       21H
              POPF
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
       DSPAX  ENDP
;================================== 
      DSPAX2  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSHF
              XOR       CX,CX
              MOV       BX,2
  @DSPAX2_1:
              XOR       DX,DX
              DIV       BX
              INC       CX
              OR        DX,30H
              PUSH      DX
              CMP       AX,0
              JNE       @DSPAX2_1
              MOV       AH,2
 @DISPAX2_2:
              POP       DX
              CMP       DL,3AH
              JB        @DISPAX2_3
              ADD       DL,7
 @DISPAX2_3:
              INT       21H
              LOOP      @DISPAX2_2
              MOV       DL,32
              INT       21H
              POPF
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
      DSPAX2  ENDP
;================================  
       LFCR:  PUSH      AX
              PUSH      DX
              MOV       AH,2
              MOV       DL,13
              INT       21H
              MOV       DL,10
              INT       21H
              POP       DX
              POP       AX
              RET
;=================================   
        CODE  ENDS
              END       START

本回答被网友采纳
相似回答