回 帖 发 新 帖 刷新版面

主题:A请求高手帮运行看看这个程序

题目为:用汇编语言编写一个简单的一位数计算器,原文件名为M10.asm,可执行文件为M10.exe.请高手帮忙26日小弟要

.NODEL SMALL
.STACK 
DSEG SEGMENT
  A DB 2 DUP(0)
  CHAR DB ?
DSEG ENDS
CSEG SEGMENT 
        ASSUME CS:CSEG,DS:DSEG
START   PROC FAR
        PUSH DS
        XOR AX,AX
        PUSH AX
        MOV AX,DSEG
        MOV DS,AX
  RC:   MOV SI,0
        MOV CX,0
        CALL INPUT
      
        CALL PCHAR
        CALL INPUT
        CMP CX,2
        JZ T
        CALL CALCULATE
        CALL DISPLAY
        JMP RC
   T:   RET
START   ENDP
INPUT   PROC
        MOV AH,01H
        INT 21H
        SUB AL,30H
        MOV BL,10
        MUL BL
        MOV BL,AL
        INT 21H
        SUB AL,30H
        ADD AL,BL
        CMP AL,0
        JNZ E
        INC CX
   E:   MOV A[SI],AL
        INC SI
        RET
INPUT   ENDP
PCHAR   PROC
        MOV AH,01H
        INT 21H
        MOV CHAR,AL
        RET
PCHAR ENDP
CALCULATE PROC
        MOV AL,CHAR
        CMP AL,2BH
        JZ P
        CMP AL,2DH
        JZ S
        CMP AL,2AH
        JZ M
        CMP AL,2FH                     ;line58
        JZ D     
        JMP O
P:      CALL ADDX
        JMP O
S:      CALL SUBX
        JMP O
M:      CALL MULX
        JMP O
D:      CALL DIVX
O:      RET
CALCULATE ENDP
ADDX   PROC
       MOV   SI,O
       MOV   Al,A[SI]                ;73
       INC   SI                     
       MOV   BL,A[SI]
       ADD   AL,BL
       MOV   A[SI],AL
       MOV   BYTE PTR A[SI-1],0
       RET
ADDX   ENDP
SUBX   PROC
       MOV   SI,O
       MOV   Al,A[SI]
       INC   SI
       MOV   BL,A[SI]
       SUB   AL,BL
       MOV   A[SI],AL
       MOV   BYTE PTR A[SI-1],0
       RET
SUBX   ENDP
MULX   PROC
       MOV   SI,O
       MOV   AL,A[SI]
       MOV   AH,0
       INC   SI
       MOV   BL,A[SI]
       MUL   BL
       DEC   SI
       MOV   A[SI],AH
       MOV   A[SI+1],AL
       RET
MULX   ENDP
DIVX   PROC
       MOV   SI,O
       MOV   AL,A[SI]
       MOV   AH,0
       INC   SI
       MOV   BL,A[SI]
       div   BL
       DEC   SI
       MOV   A[SI],AH
       MOV   A[SI+1],AL
       RET
DIVX   ENDP
DISPLAY PROC
        MOV  SI,0
        MOV  DL,3DH
        MOV  AH,02H
        INT  21H
        PUSH CX
        R: MOV CL,A[SI]
        MOV  DL,0
L1:     CMP  CL,100
        JB   L2
        SUB  CL,100
        INC  DL
        JMP  L1
L2:     ADD DL,30H
        MOV AH,02H
        INT 21H             ; 130
        MOV DL,0
L3:     CMP CL,10
        JB L4
        SUB  CL,10
        INC DL 
        JMP L3
L4:     ADD DL,30H
        mov AH,02H
        INT 21H
        MOV DL,CL
        ADD DL,30H
        MOV AH,02H
        INT 21H
        INC SI
        CMP SI,2
        JNZ R
        MOV DL,0DH                      ; 移出回车换行
        MOV AH,02H
        INT 21H
        MOV DL,0AH
        INT 21H
        POP CX
        RET
DISPLAY ENDP
CSEG ENDS
        END START

回复列表 (共2个回复)

沙发

.MODEL SMALL
.STACK 
DSEG SEGMENT
  A DB 2 DUP(0)
  CHAR DB ?
DSEG ENDS
CSEG SEGMENT 
        ASSUME CS:CSEG,DS:DSEG
START   PROC FAR
        PUSH DS
        XOR AX,AX
        PUSH AX
        MOV AX,DSEG
        MOV DS,AX

  RC:   MOV SI,0
        MOV CX,0
        CALL INPUT  
        CALL PCHAR
        CALL INPUT
        CMP CX,3
        JZ T
        CALL CALCULATE
        CALL DISPLAY
        JMP RC
   T:   RET
START   ENDP
INPUT   PROC
        MOV AH,01H
        INT 21H
    CMP AL,0DH
    JE T
        SUB AL,30H
        CMP AL,0
        JB E
        INC CX
   E:   MOV A[SI],AL
        INC SI
        RET
INPUT   ENDP
PCHAR   PROC
        MOV AH,01H
        INT 21H
        MOV CHAR,AL
        RET
PCHAR ENDP
CALCULATE PROC
        MOV AL,CHAR
        CMP AL,2BH
        JZ P
        CMP AL,2DH
        JZ S
        CMP AL,2AH
        JZ M
        CMP AL,2FH                     ;line58
        JZ D     
        JMP O
P:      CALL ADDX
        JMP O
S:      CALL SUBX
        JMP O
M:      CALL MULX
        JMP O
D:      CALL DIVX
O:      RET
CALCULATE ENDP
ADDX   PROC
       MOV   SI,0
       MOV   Al,A[SI]                ;73
       INC   SI                     
       MOV   BL,A[SI]
       ADD   AL,BL
       MOV   A[SI],AL
       MOV   BYTE PTR A[SI-1],0
       RET
ADDX   ENDP
SUBX   PROC
       MOV   SI,0
       MOV   Al,A[SI]
       INC   SI
       MOV   BL,A[SI]
       SUB   AL,BL
       MOV   A[SI],AL
       MOV   BYTE PTR A[SI-1],0
       RET
SUBX   ENDP
MULX   PROC
       MOV   SI,0
       MOV   AL,A[SI]
       MOV   AH,0
       INC   SI
       MOV   BL,A[SI]
       MUL   BL
       DEC   SI
       MOV   A[SI],AH
       MOV   A[SI+1],AL
       RET
MULX   ENDP
DIVX   PROC
       MOV   SI,0
       MOV   AL,A[SI]
       MOV   AH,0
       INC   SI
       MOV   BL,A[SI]
       div   BL
       DEC   SI
       MOV   A[SI],AH
       MOV   A[SI+1],AL
       RET
DIVX   ENDP
DISPLAY PROC
        MOV  SI,0
        MOV  DL,3DH
        MOV  AH,02H
        INT  21H
        PUSH CX
        MOV CL,A[SI+1]
        MOV  DL,0
L1:     CMP  CL,10
        JB   L2
        SUB  CL,10
        INC  DL
        JMP  L1
L2:     ADD DL,30H
        MOV AH,02H
        INT 21H             ; 130
   
        MOV DL,CL
        ADD DL,30H
        MOV AH,02H
        INT 21H
        MOV DL,0DH                      ; 移出回车

换行
        MOV AH,02H
        INT 21H
        MOV DL,0AH
        INT 21H
        POP CX
        RET
DISPLAY ENDP
CSEG ENDS
        END START

错误不是很多,不过在最后你用减法实现除法的功能,有点麻烦

板凳

非常感谢,请问可以和你联系吗,怎么联系,我的邮箱是lishendg@yahoo.com,cn

我来回复

您尚未登录,请登录后再回复。点此登录或注册