求Z等于((W-X)/10*Y)的平方     
DATA SEGMENT USE16
X    DW ?
Y    DW ?
W    DW ?
Z    DW ?
str db 4,0,
INPUT1 DB "PLEASE INPUT W:",0AH,0DH,"$"
INPUT2 DB "PLEASE INPUT X:",OAH,0DH,"$"
INPUT3 DB "PLEASE INPUT Y:",OAH,0DH,"$"
DATA ENDSCODE SEGMENT USE16
     ASSUMEN CS:CODE,DS:DATA
BEGIN:MOV AX,DATA 
      MOV DS,AX
      MOV DX,OFFSET INPUT1 
      MOV AH,9
      INT 21H
      MOV AH,1
      INT 21H
      MOV BL,AL
      SAL BX,8
      MOV AH,1
      INT 21H
      MOV BL,AL ;BX存放W
      MOV DX,OFFSET INPUT2
      MOV AH,9
      INT 21H
      MOV AH,1
      INT 21H
      MOV SI,AL
      SAL SI,8
      MOV AH,1
      INT 21H ;SI存放X
      ADD SI,AL
      MOV DX,OFFSET INPUT1 
      MOV AH,9
      INT 21H
      MOV AH,1
      INT 21H
      MOV DI,AL
      SAL BX,8
      MOV AH,1
      INT 21H
      ADD DI,AL ;DI存放Y
      SUB BX,SI
      MOV AX,BX
      DIV 10
      IMUL DI
      IMUL AX,AX
CODE  ENDS
      EDN BEGIN
有什么错误请大家指教

解决方案 »

  1.   

    错了  应该是
    DATA SEGMENT 
    INPUT1 DB "PLEASE INPUT W:",0AH,0DH,"$"
    INPUT2 DB "PLEASE INPUT X:",0AH,0DH,"$"
    INPUT3 DB "PLEASE INPUT Y:",0AH,0DH,"$"
    DATA ENDS
    CODE SEGMENT 
         ASSUME CS:CODE,DS:DATA
    BEGIN:MOV AX,DATA 
          MOV DS,AX
          MOV BX,0
          MOV SI,0
          MOV DX,0
          MOV DX,OFFSET INPUT1 
          MOV AH,9
          INT 21H
          MOV AH,1
          INT 21H
          MOV BL,AL
          SHL BX,8
          MOV AH,1
          INT 21H
          MOV BL,AL ;BX存放W
          MOV DX,OFFSET INPUT2
          MOV AH,9
          INT 21H
          MOV AH,1
          INT 21H
          MOV SI,AL
          SHL SI,8
          MOV AH,1
          INT 21H ;SI存放X
          ADD SI,AL
          MOV DX,OFFSET INPUT1 
          MOV AH,9
          INT 21H
          MOV AH,1
          INT 21H
          MOV DI,AL
          SHL BX,8
          MOV AH,1
          INT 21H
          ADD DI,AL ;DI存放Y
          SUB BX,SI
          MOV AX,BX
          DIV 10
          IMUL DI
          IMUL AX,AX
          MOV DL,AX
          MOV AH,2
          INT 21H
    CODE  ENDS
          END BEGIN      
          
      

  2.   

    DOS下的16位应用,要找一个古老的汇编器才能编译运行了。(如老版本的masm或tasm)
      

  3.   

    稍稍看了一下:
          MOV SI,AL   //错,类型不配,改为XOR AH,AH  MOV SI,AX
    同样的错有多处,如MOV DI,AL ; ADD DI,AL ; MOV DL,AX等
    DIV 10  // intel CPU 的DIV不支持立即数,要改MOV BX,10 ; DIV BX
    这些只是语法上的,功能上的要找汇编工具汇编运行才能看出来了
      

  4.   

    没有语法错的(是否能正确运行自己试一下吧)DATA SEGMENT 
    INPUT1 DB "PLEASE INPUT W:",0AH,0DH,"$" 
    INPUT2 DB "PLEASE INPUT X:",0AH,0DH,"$" 
    INPUT3 DB "PLEASE INPUT Y:",0AH,0DH,"$" 
    DATA ENDS 
    CODE SEGMENT 
        ASSUME CS:CODE,DS:DATA 
    BEGIN:MOV AX,DATA 
          MOV DS,AX 
          MOV BX,0 
          MOV SI,0 
          MOV DX,0 
          MOV DX,OFFSET INPUT1 
          MOV AH,9 
          INT 21H 
          MOV AH,1 
          INT 21H 
          MOV BL,AL 
          MOV CL,8
          SHL BX,CL 
          MOV AH,1 
          INT 21H 
          MOV BL,AL ;BX存放W 
          MOV DX,OFFSET INPUT2 
          MOV AH,9 
          INT 21H 
          MOV AH,1 
          INT 21H 
          XOR AH,AH
          MOV SI,AX 
          MOV CL,8
          SHL SI,CL 
          MOV AH,1 
          INT 21H ;SI存放X
          XOR AH,AH 
          ADD SI,AX 
          MOV DX,OFFSET INPUT1 
          MOV AH,9 
          INT 21H 
          MOV AH,1 
          INT 21H 
          XOR AH,AH
          MOV DI,AX 
          MOV CL,8
          SHL BX,CL 
          MOV AH,1 
          INT 21H 
          XOR AH,AH
          ADD DI,AX ;DI存放Y 
          SUB BX,SI 
          MOV AX,BX
          MOV BX,10 
          DIV AX
          IMUL DI 
          IMUL AX 
          MOV DX,AX 
          MOV AH,2 
          INT 21H 
    CODE  ENDS 
          END BEGIN 
      

  5.   

    中间的语法错误说明基础太不牢实,MOV SI,AL   DIV 10 这种错误太不应该了。
    DATA SEGMENT 
       INPUT1 DB "PLEASE INPUT W:",0AH,0DH,"$" 
       INPUT2 DB "PLEASE INPUT X:",0AH,0DH,"$" 
       INPUT3 DB "PLEASE INPUT Y:",0AH,0DH,"$" 
    DATA ENDS CODE SEGMENT 
        ASSUME CS:CODE,DS:DATA 
    BEGIN: MOV AX,DATA 
           MOV DS,AX 
           MOV BX,0 
           MOV SI,0 
           MOV CX,0Ah 
           MOV DX,OFFSET INPUT1 
           MOV AH,9 
           INT 21H   
    IN_W:  ;这里开始输入W,W由多个数位组成,如123,用户要
           ;输入3个字符, 分别是'1','2','3'最后敲回车,回
           ;车的ASCII是13,所以发现输入的是13,就表示结束
           ;要把输入的字符转换成数字然后再参与计算
           MOV AH,1 
           INT 21H
           CMP AL, 0Dh
           jz  PRE_IN_X
           XOR AH, AH
           SUB AL, 30h
           XCHG AX, BX
           MUL CX
           ADD AX, BX
           XCHG AX, BX    ;BX存放W 
           JMP IN_W
    PRE_IN_X:       
           MOV DX, OFFSET INPUT2 
           MOV AH, 9 
           INT 21H
    IN_X:
           MOV AH, 1 
           INT 21H
           CMP AL, 0Dh
           jz  PRE_IN_Y
           XOR AH, AH
           SUB AL, 30h 
           XCHG AX, SI
           MUL CX
           ADD AX, SI
           XCHG AX, SI  ;SI存放X 
           JMP IN_X
    PRE_IN_Y:        
           MOV DX, OFFSET INPUT3 
           MOV AH, 9
           INT 21H 
    IN_Y:       
           MOV AH, 1 
           INT 21H
           CMP AL, 0Dh
           jz  PRE_CALC
           XOR AH, AH
           SUB AL, 30h 
           XCHG AX, DI
           MUL CX
           ADD AX, DI
           XCHG AX, DI  ;DI存放Y 
           JMP IN_Y      
    PRE_CALC:       
           SUB BX, SI 
           MOV AX, BX   
           DIV CX    
           IMUL DI
           IMUL AX 
           ;到这里就是计算完成了,结果就在DX:AX中
           ;接下来就是把结果转换成字符串,自己写函数吧
           MOV AH, 2 
           INT 21H 
    CODE   ENDS 
           END BEGIN