主题:书本源程序的问题,进来回答有分啦!
我照着书本的程序输入,可是却被抱错!
请高手指点一下,是什么原因呢?程序如下:
.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
帮忙运行一下啦,高手!不甚感激!以分相送!
请高手指点一下,是什么原因呢?程序如下:
.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
帮忙运行一下啦,高手!不甚感激!以分相送!