回 帖 发 新 帖 刷新版面

主题:书本源程序的问题,进来回答有分啦!

我照着书本的程序输入,可是却被抱错!
  请高手指点一下,是什么原因呢?程序如下:
.386
STACK  SEGMENT STACK 
       DW     128    DUP(0)
TOP    LABEL   WORD
STACK  ENDS
DATA   SEGMENT
RESUL  DW  0
N      DW   5 
OUTPU  DB  'N! = '
BUF    DB  5 DUP(''),0DH,0AH,'$'            ;[[b]b][b]这里报错:empty string[/b][/[/b]b]
CONT   DW  10000,1000,100,10,1
DATA   ENDS
CODE   SEGMENT
       ASSUME   CS:CODE,DS:DATA,SS:STACK
START:  MOV   AX,DATA
        MOV   DS,AX
        MOV   AX,STACK
        MOV   SS,AX
        MOV   SP,OFFSET TOP
        LEA   AX,RESUL          ;将结果地址入栈
        PUSH  AX
        MOV   AX,N              ;将所求的N!的数N入栈
        PUSH  AX
        CALL  FACT              ;调用求N!的子程序
        CALL  C2T10             ;调用二进制数转换为十进制数的子程序
        LEA   DX,OUTPU          ;显示输出
        MOV   AH,9
        INT   21H
        MOV   AH,4CH
        INT   21H
;子程序名:FACT
;功能描述:求N!
;入口参数:将结果的地址RESUL和N值压入堆栈
;出口参数:AX寄存器、RESUL单元存放求出的N!的结果
FACT   PROC
       PUSH   BP
       MOV    BP,SP                  ;SP中的内容送BP寄存器
       MOV    BX,[BP+6]              ;将RESUL的地址送BX寄存器
       MOV    AX,[BP+4]              ;将待求的N!的N送AX寄存器
       CMP    AX,0                   ;AX=0则转DONE将0!=1的值送AX
       JZ     DONE                   
       PUSH   BX                     ;不为0则将RESUL的地址入栈
       DEC    AX                     ;N-1的值入栈
       PUSH   AX
       CALL   FACT                    ;该子程序调用自身子程序
       MOV    AX,[BP-2]               ;将上次RESUL中的结果送AX寄存器
       MUL    WORD  PTR  [BP+4]       ;上次的结果与本次的值相乘
       JMP    RETU
DONE:  MOV   AX,1
RETU:  MOV   [BP+6],AX               ;结果送RESUL单元
       MOV   [BX],AX
       POP   BP
       RET   4
FACT   ENDP
;子程序名:C2T10
;功能描述:将RESUL中的二进制数转换为十进制数存放在BUF缓冲区
;入口参数:RESUL中存放二进制数
;出口参数:BUF缓冲区中存放转换后的十进制数
C2T10   PROC
         MOV   AX,RESUL             ;将    RESUL的内容送AX
         MOV   SI,0
         MOV   CX,5
         LEA   BX,CONT
CVDL:    CWD                        ;将AX中的内容扩展为双字DX:AX
         DIV  WORD  PTR   [BX]       ;DX:AX中的内容除以CONT中的值
         ADD  AL,30H                  ;将商转换为ASCII码送显示字符串     
         MOV  BUF[SI],AL
         INC  SI
         MOV  AX,DX                  ;将余数送    AX
         ADD  BX,2
         LOOP CVDL                 ;未完则继续
         RET
C2T10    ENDP
CODE    ENDS
        END  START
不知道为什么啊,竟然在这里报错了:
BUF    DB  5 DUP(''),0DH,0AH,'$'            ;这里报错:empty string
帮忙运行一下啦,高手!不甚感激!以分相送!

回复列表 (共2个回复)

沙发

DUP('') 改成 DUP(0) 看看

板凳

dup(?)应该可以的.

我来回复

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