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