⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iqu_f.asm

📁 8088计算器开发
💻 ASM
字号:
;/////////////8088 caculater/////////////////
;//README
;// key   value
;   0~9 <-> 0~9
;    A  <->  +
;    B  <->  -
;    C  <->  *
;    D  <->  /
;    E  <->  RESET
;    F  <->  =
;//USING DIRECT IQUIRING
;////////////////////////////////////////////
DATA SEGMENT
   NUM1 DW ?        ;CURRENT INPUT NUMBER
   TEMP DW ?        ;TEMP SAVE
   ANS  DW ?        ;RESULT
   FLAG DB ?        ;DISPLAY\RESET  FLAY
   FLAG_O DB ?      ;OPERATER FLAG
DATA ENDS

STACK SEGMENT
	DW 64 DUP(?)
    ;
STACK ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK
START:
    MOV AX,DATA
    MOV DS,AX
MAIN_STAR:
    ;//CONSTANT INITIALIZE
    MOV  AX,0
    MOV  BX,0
    MOV  CX,0
    MOV  DX,0
    MOV  NUM1,0
    MOV  TEMP,0
    MOV  ANS ,0
    MOV  FLAG_O,0
    MOV  FLAG,0
ROUND_ONE:    
    CALL SCAN         ;Keyboard scan
    CALL MATCH        ;Keycode match 
    CMP FLAG,1
    JNE ROUND_ONE
    JMP MAIN_STAR   
;////////////KEY SCAN/////////////////////     
SCAN LABEL NEAR

    MOV AL,90H        ;setting:port B out and port A in
    OUT 63H,AL   
    MOV AH,0EEH       ;output initialize   
ONE:MOV AL,AH
    OUT 61H,AL        ;port B output BH
    ;CALL DELAY
TWO:IN  AL,60H        ;read port A
    MOV BL,AL
    AND BL,0FH        ;get lower 4 bits
    CMP BL,0FH        ;key down checking
    JNE SAVE
    ROL AH,1          ;left shift 1 bit
    JMP ONE
SAVE:
    IN  AL,60H        
    CMP AL,0FH
    JNE TWO
    MOV BH,BL
    AND AH,0F0H       ;get BH high 4 bits
    OR  BH,AH         ;save key code to BH 
    RET
;key scan end  
    
;;//////////////////DISPLAY RESULT///////////////////////////     
DISP  LABEL NEAR 
    MOV DL,0
    MOV CH,0         ;to    
CYC_D:
    MOV AX,ANS       ;MOVE IN THE RESULT 
    MOV CL,10
    DIV CL            
    MOV BL,AL         ;get remainder
    CMP BL,0          ;the remainder should not equal 0 more than twice
    JNE GOON
    INC CH
    CMP CH,1
    JG  RETURN_D      ;RETURN    
 
GOON:    
    MOV CL,8
    SHR AX,CL
    ADD AX,0130H      ;current data bit output
    PUSH AX           ;PUSH AND SAVE
    INC DL            ;SAVE DATA COUNTS
    AND BH,0
    MOV ANS,BX        ;REINITIALIZE ANSWER
    JMP CYC_D
RETURN_D:             
    CMP DL,0         
    JE RETURN_D_E     ;END DISPLAY
    POP AX            ;POP THE SAVED DATA 
    INT 10H           ;DISPLAY
    DEC DL
    JMP RETURN_D    
RETURN_D_E:
    RET
;DISP END
;//////////////////KEYCODE MATCH//////////////
MATCH LABEL NEAR
MATCH_NUM:
    CMP BH,0EEH       ;0
    JNE NUM_1
    MOV AX,0130H
    MOV TEMP,0
    JMP NUM_OK
NUM_1:
    CMP BH,0DEH       ;1
    JNE NUM_2
    MOV AX,0131H
    MOV TEMP,1
    JMP NUM_OK
NUM_2:
    CMP BH,0BEH       ;2
    JNE NUM_3
    MOV AX,0132H
    MOV TEMP,2
    JMP NUM_OK
NUM_3:
    CMP BH,07EH       ;3
    JNE NUM_4
    MOV AX,0133H
    MOV TEMP,3
    JMP NUM_OK 
NUM_4:
    CMP BH,0EDH       ;4
    JNE NUM_5
    MOV AX,0134H
    MOV TEMP,4
    JMP NUM_OK
NUM_5:
    CMP BH,0DDH       ;5
    JNE NUM_6
    MOV AX,0135H
    MOV TEMP,5
    JMP NUM_OK
NUM_6:
    CMP BH,0BDH       ;6
    JNE NUM_7
    MOV AX,0136H
    MOV TEMP,6
    JMP NUM_OK
NUM_7:
    CMP BH,07DH       ;7
    JNE NUM_8
    MOV AX,0137H
    MOV TEMP,7
    JMP NUM_OK
NUM_8:
    CMP BH,0EBH       ;8
    JNE NUM_9
    MOV AX,0138H
    MOV TEMP,8
    JMP NUM_OK
NUM_9:
    CMP BH,0DBH       ;9
    JNE OPER_ADD
    MOV AX,0139H
    MOV TEMP,9
    JMP NUM_OK                    
NUM_OK:
   INT 10H            ;NUMBER OUTPUT
   ;NUM1*10+TEMP
   MOV BL,10
   MOV AX,NUM1
   MUL BL            
   ADD AX,TEMP
   MOV NUM1,AX        ;INPUT DATA
   JMP MATCH_OK
OPER_ADD:
   CMP BH,0BBH        ;A
   JNE OPER_SUB   
   MOV FLAG_O,1
   MOV AX,012BH
   JMP OPER_OK
OPER_SUB:
   CMP BH,07BH         ;B
   JNE OPER_MUL
   MOV FLAG_O,2
   MOV AX,012DH
   JMP OPER_OK
OPER_MUL:
   CMP BH,0E7H          ;C
   JNE OPER_DIV   
   MOV FLAG_O,3
   MOV AX,012AH
   JMP OPER_OK
OPER_DIV:  
   CMP BH,0D7H         ;D
   JNE RESET
   MOV FLAG_O,4
   MOV AX,012FH
OPER_OK:
   INT 10H  ;OUTPUT OPERATER
   CMP CH,0
   JNE OPER_END
   MOV AX,NUM1
   MOV ANS,AX        ;FIRST ROUND SAVE 
   MOV NUM1,0        ;NUM1 SET O
   INC CH
OPER_END:  
   JMP MATCH_OK 
RESET:              ;RESET
   CMP BH,0B7H
   JNE RESULT 
   CALL CRLF   
   MOV FLAG,1    
   JMP MATCH_OK
RESULT:              ;=
   ;CMP BH,0B7H
   ;JNE MATCH_OK
   CMP BH,77H
   JNE MATCH_OK
   ;;
   CMP FLAG_O,1      ;ADD
   JNE OP_DEC        ;ANS+NUM1=>ANS
   MOV AX,ANS
   ADD AX,NUM1
   MOV ANS,AX 
   JMP OP_END
OP_DEC:
   CMP FLAG_O,2      ;DEC
   JNE OP_MUL        ;ANS-NUM1=>ANS
   MOV AX,ANS
   SUB AX,NUM1 
   MOV ANS,AX
   JMP OP_END
OP_MUL:
   CMP FLAG_O,3      ;MUL
   JNE OP_DIV        ;ANS*MUL=>ANS 
   MOV AX,ANS
   MOV DX,NUM1
   MUL DX      
   MOV ANS,AX
   JMP OP_END
OP_DIV:              ;DIV
   MOV AX,ANS        ;ANS/MUL=>ANS 
   MOV CX,NUM1
   DIV CX 
   AND AX,00FFH  
   MOV ANS,AX
OP_END:   
   MOV AX,013DH ;OUTPUT '='
   INT 10H
   CALL DISP    ;OUTPUT RESULT
   CALL CRLF    ;CRLF
   MOV FLAG,1 
MATCH_OK:
   RET   
;MATCH END
;///////////////////CRLF//////////////////////    
CRLF LABEL NEAR
   MOV AX,010AH
   INT 10H
   MOV AX,010DH
   INT 10H
   RET
;CRLF END
CODE ENDS
    END START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -