Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as ARM assembler by registered user toysoldier ( 11 years ago )
.MODEL SMALL
.STACK  200
.386
.DATA
    BUFC     DB 6
             DB ?
             DB 6 DUP (?)
    BUF1     DB 'This program is used to do some exeicise for primary school student.$'
    BUF2     DB 'Choose one of the options(+ or - or * or /) :$'
    BUF3     DB ' Thanks for yourusing!$'
    BUF5     DB 'Input the number of equations you want to create.$'
    BUF7     DB 'Ifyou want to quit,please enter Q.$'
    BUF8     DB 'Invalid! Please enter another character.$'
    BUF10    DB ': Addition - both two integers areless than 100.$'
    BUF11    DB ': Subtraction - both two integers are less than 100.$'
    BUF12    DB ': Multiplication - both two integersare less than 100.$'
    BUF13    DB ': Division - both two integers areless than 100.$'
    BUF14    DB ': Quit the program.$'
    BUF15    DB 'The number you enter is invalid!please enter it again.$'
    BUFR     DB 'Right.$'
    BUFW     DB 'Wrong.$'
    array    db 20 dup (?)
    brray    db 20 dup (?)
    CC       DB     '+'
    WW       db     '-'
    MU       DB     '*'
    DV       DB     '/'
    GG       DB     '='
    BUFRN    DB 'THE RIGHT NUMBER:$'
    COUNTR   DB 0
    BUFWN    DB 'THE WRONG NUMBER:$'
    COUNTW   DB 0
     
.CODE
start: 
    MOV  AX, @DATA
    MOV  ES, AX
    MOV  DS, AX
    XOR AX, AX
    MOV  DX, OFFSET  BUF1
    MOV  AH, 9
    INT 21H
    CALL DIS
    MOV  DX, OFFSET  BUF2
    MOV  AH, 9
    INT 21H
    CALL DIS
    CALL DIS
    CALL DECLARE
STARTOK:
    CALL DIS
    MOV  DX, OFFSET  BUF7
    MOV  AH, 9
    INT 21H
    CALL DIS
    MOV  AH, 1
    INT 21H
    ;接收键入字符
    CMP AL, '+'
    JZ ADDER
    CMP AL, '-'
    JZ SUBTR
    CMP AL, '*'
    JZ MULTI
    CMP AL, '/'
    JZ DIVIS
    CMP AL, 'Q'
    JZ DONE
    MOV  DX, OFFSET  BUF8
    MOV  AH, 9
    INT 21H
    CALL DIS
    JMP STARTOK
    ;
ADDER:
    CALL DIS 
    MOV  DX, OFFSET BUF5
    MOV  AH, 9
    INT 21H
    CALL DIS
    CALL INCHAR
    CALL DIS
ADDCIR:
    XOR BH, BH
    CALL RAND
    mov al,bl
    XOR AH, AH
    CALL OUTt
    MOV  DI, BX
    MOV DL,CC ;显示'+'
    MOV AH,2
    INT 21H
    xor  ax,ax
    xor  bx,bx
    xor  dx,dx
    CALL RAND1
    mov al,bl
    CALL OUTt
    MOV  DL,GG ;显示'='
    MOV  AH,2
    INT 21H
    CALL INKEY
    CALL DIS
    ADD DI, BX
    MOV  AX, DI
    CALL OUTt
    CALL DIS
    CALL COMPARE
     
    LOOP ADDCIR

    CALL COUNT
    JMP STARTOK

SUBTR:
    CALL DIS
    MOV  DX, OFFSET BUF5
    MOV  AH, 9
    INT 21H
    CALL DIS
    CALL INCHAR
    CALL DIS
SUBCIR:
    XOR BH, BH
    CALL RAND
    MOV  DI, BX
    xor  ax,ax
    xor  bx,bx
    xor  dx,dx
    CALL RAND1
    CMP DI, BX
    JB BELOW
    MOV  AX, DI
    XOR AH, AH
    CALL OUTt
    MOV DL,WW ;显示'-'
    MOV  AH,2
    INT 21H
    MOV  AX, BX
    XOR AH, AH
    CALL OUTt
    MOV  DL,GG ;显示'='
    MOV  AH,2
    INT 21H
    CALL INKEY
    CALL DIS
    SUB DI, BX
    MOV  AX, DI
    JMP SSS
BELOW:
    MOV  AX, BX
    CALL OUTt
    MOV DL,WW ;显示'-'
    MOV AH,2
    INT 21H
    MOV  AX, DI
    CALL OUTt
    MOV DL,GG ;显示'='
    MOV AH,2
    INT 21H
    CALL INKEY
    CALL DIS
    SUB BX, DI
    MOV  AX, BX
SSS:
    CALL OUTt
    CALL DIS
    CALL COMPARE
     
    LOOP SUBCIR
    CALL COUNT
    JMP STARTOK
MULTI:
    CALL DIS
    MOV  DX, OFFSET BUF5
    MOV  AH, 9
    INT 21H
    CALL DIS
    CALL INCHAR
    CALL DIS
MULCIR:
    XOR BH, BH
    CALL RAND
    mov al,bl
    XOR AH, AH
    CALL OUTt
    MOV  DI, BX
    MOV DL,MU ;显示'*'
    MOV AH,2
    INT 21H
    xor ax,ax
    xor bx,bx
    xor dx,dx
    CALL RAND1
    mov al,bl
    CALL OUTt
    MOV DL,GG ;显示'='
    MOV AH,2
    INT 21H
    CALL INKEY
    CALL DIS
    MOV  AX, DI
    IMUL AX, BX
    ;
    MOV  AX, DI
    CALL OUTt
    CALL DIS
    CALL COMPARE
     
    LOOP MULCIR
    CALL COUNT
    JMP STARTOK
DIVIS:
    CALL DIS 
    MOV  DX, OFFSET BUF5
    MOV  AH, 9
    INT 21H
    CALL DIS
    CALL INCHAR
    CALL DIS
DIVCIR:
    XOR BH, BH
    XOR AH, AH
    CALL RAND
    MOV  DL, BL
    INC DL
    xor ax,ax
    xor bx,bx
    CALL RAND1
    INC BL
    MOV  AL, DL
    CMP AL, BL
    JB DICC
    JMP DIC
DICC:
    MOV  DL, BL
    MOV  BL, AL
    MOV  AL, DL
     
DIC:
    AND BL, 0015H
    XOR AH, AH
    DIV BL
    XOR AH, AH
    MUL BL
    XOR AH, AH
    mov DI, AX
    CALL OUTt
    MOV DL, DV ;显示'/'
    MOV AH,2
    INT 21H
     
    MOV AX, BX
    XOR AH, AH
    CALL OUTt
    MOV DL,GG ;显示'='
    MOV AH,2
    INT 21H
    CALL INKEY
    CALL DIS
    mov  AX, DI
    XOR AH, AH
    xor  bh, bh
     
    DIV BL
    XOR AH, AH
    CALL OUTt
    CALL DIS
    CALL COMPARE
     
    LOOP DIVCIR
    CALL COUNT
    JMP STARTOK
DONE:
    CALL DIS
    MOV  DX, OFFSET BUF3
    MOV  AH, 9
    INT 21H
    CALL DIS
    Mov  ah,4ch
    Int 21h
    ;回车换行
    DIS PROC
    MOV  DL, 0DH
    MOV  AH, 2
    INT 21H
    MOV  DL, 0AH
    MOV  AH, 2
    INT 21H
    RET
    DIS ENDP
     
    RAND PROC
    PUSH CX
    PUSH DX
    PUSH AX
    STI
    MOV AH,0 ;读时钟计数器值
    INT    1AH
    MOV     AX,DX ;清高6位
    AND    AH,3
    MOV     DL,101 ;除101,产生0~100余数
    DIV    DL
    MOV     BL,AH ;余数存BX,作随机数
    POP    AX
    POP    DX
    POP    CX
    RET
    RAND ENDP
     
    RAND1 PROC
    PUSH CX
    PUSH DX
    PUSH AX
    STI
    MOV AH,0 ;读时钟计数器值
    INT    1AH
    MOV     AX,DX ;清高5位
    AND    Ax,07efh
    MOV     DL,100 ;除101,产生0~100余数
    DIV    DL
    MOV     BL,AH ;余数存BX,作随机数
    POP    AX
    POP    DX
    POP    CX
    RET
    RAND1 ENDP
     
    OUTt    PROC
    push    bx
    push    cx
    push    dx
    push    di
    mov bx,0ah
    xor cx,cx
again:
    xor dx,dx
    div    bx
    add    dx,30h
    push dx
    inc cx
    cmp    ax,0
    jnz    again
    xor     di,di
next:
    mov     bx,offset array
    pop    dx
    mov     [bx+di],dl
    inc     di
    dec    cx
    jnz    next
    push dx
    mov dl,24h
    mov [bx+di],dl
    pop    dx
    lea    dx,array
    mov     ah,09h
    int    21h
    pop    di
    pop    dx
    pop    cx
    pop    bx
    RET    
    OUTt ENDP
     
    ;菜单声明
    DECLARE PROC
    MOV  DL, '+'
    MOV  AL, 2
    INT 21H
    MOV  DX, OFFSET BUF10
    MOV  AH, 9
    INT 21H
    CALL DIS
    MOV  DL, '-'
    MOV  AL, 2
    INT 21H
    MOV  DX, OFFSET BUF11
    MOV  AH, 9
    INT 21H
    CALL DIS
    MOV  DL, '*'
    MOV  AL, 2
    INT 21H
    MOV  DX, OFFSET BUF12
    MOV  AH, 9
    INT 21H
    CALL DIS
    MOV  DL, '/'
    MOV  AL, 2
    INT 21H
    MOV  DX, OFFSET BUF13
    MOV  AH, 9
    INT 21H
    CALL DIS
    MOV  DL, 'Q'
    MOV  AL, 2
    INT 21H
    MOV  DX, OFFSET BUF14
    MOV  AH, 9
    INT 21H
    CALL DIS
    RET
    DECLARE ENDP 
    ; MENU 
    INCHAR PROC
BEGIN:
    XOR BX, BX
    XOR CX, CX
    MOV  AH, 1
    INT 21H
    MOV  BL, AL
    CMP BL, '0'
    JB INDONE
    CMP BL, '9'
    JA INDONE
    SUB BL, '0'
    MOV  AH, 1
    INT 21H
    MOV  CL, AL
    CMP CL, '0'
    JB INDONE
    CMP CL, '9'
    JA INDONE
    SUB CL, '0'
    IMUL    BX, 0AH
    ADD CX, BX
    JMP KKK
INDONE:
    MOV  DX, OFFSET BUF15
    MOV  AH, 0AH
    INT 21H
    JMP BEGIN
KKK:
    RET
    INCHAR ENDP
    INKEY PROC
    PUSH AX
    PUSH DX
    MOV  DX, OFFSET BUFC
    MOV  AH, 0AH
    INT 21H
    POP DX
    POP AX
    RET
    INKEY ENDP
    COMPARE PROC
    PUSH CX
    PUSH BX
    PUSH SI
    PUSH DI
    MOV  BX, OFFSET BUFC
    INC BX
    MOV  CL, [BX]
    INC BX
    MOV  SI, BX
    MOV  DI, OFFSET array
    REPE CMPSB
    JNZ WRONG
    INC COUNTR
    MOV  DX, OFFSET BUFR
    MOV  AH, 09H
    INT 21H
    JMP EEE
WRONG:
    INC COUNTW
    MOV  DX, OFFSET BUFW
    MOV  AH, 09H
    INT 21H
EEE:
    CALL DIS
    POP    DI
    POP    SI
    POP    BX
    POP    CX
    RET
    COMPARE ENDP

    COUNT   PROC
    MOV DX,OFFSET BUFRN
    MOV AH,09H
    INT 21H
    MOV AL,COUNTR
    XOR AH,AH
    CALL OUTt
    CALL DIS
    MOV DX,OFFSET BUFWN
    MOV AH,09H
    INT 21H
    MOV AL,COUNTW
    XOR AH,AH
    CALL OUTt
    CALL DIS
    MOV COUNTR,0
    MOV COUNTW,0
    RET
    COUNT   ENDP
    end start

 

Revise this Paste

Your Name: Code Language: