回 帖 发 新 帖 刷新版面

主题:[讨论]大家帮帮忙..拜托.运动字符的一个错误

[em8]我这有个程序,有一个错误,可是不知道该怎么改,,
unexpected on file encountered,,,,大家帮帮我~~
DISP  MACRO  Y,X,LENGTHS,COLOR,FLAG,VAR
DATA SEGMENT 
TOP DB 5 DUP(0AH) 
DB 31 DUP(' '),'MAIN MENU',0DH,0AH 
DB 25 DUP(' '),201,21 DUP(205),187,0DH,0AH 
DB 25 DUP(' '),186,' 1.INPUT THE STRING ',186,0DH,0AH 
DB 25 DUP(' '),186,' 2.DISPLAY MODEL ONE ',186,0DH,0AH 
DB 25 DUP(' '),186,' 3.DISPLAY MODEL TWO ',186,0DH,0AH 
DB 25 DUP(' '),186,' 4.RETURN DOS ',186,0DH,0AH 
DB 25 DUP(' '),200,21 DUP(205),188,0DH,0AH 
DB 28 DUP(' '),'CHOCICE(1,2,3,4):$' 
ENDMESG DB 5 DUP(0AH),'Please strike any key $' 
LINE EQU 2 
COLOR EQU 5FH 
LINE1 DB 201,56 DUP(205),187 
LINE2 DB 186,56 DUP(' '),186 
LINE3 DB 200,56 DUP(205),188 
LL EQU $-LINE3 
XX EQU (80-LL)/2 
KG DB 60 DUP(' ') 
LINE4 DB ' ' 

L EQU $-LINE4 
KK DB 60 DUP(' ') 
I EQU XX+1 
J EQU I+L-1 
LORG DB 0 
COUNT DW 0 
DATA ENDS 
STACK SEGMENT PARA STACK'STACK' 
MESG DB 10 DUP(?) 
STACK ENDS 

CODE SEGMENT 
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK 


BEG: MOV AX,DATA 
MOV DS,AX 
MOV ES,AX 
AGAIN: MOV AX,3 
INT 10H 
MOV AH,9 
LEA DX,TOP 
INT 21H 
MOV AH,1 
INT 21H 
CMP AL,'1' 
JNE NEXT1 
JMP S1 
NEXT1: CMP AL,'2' 
JNE NEXT2 
JMP S2 
NEXT2: CMP AL,'3' 
JNE NEXT3 
JMP S3 
NEXT3: CMP AL,'4' 
JNE AGAIN 
JMP TC 
MOV AL,4CH 
INT 21H 
S2: MOV AX,3 
DISP LINE+0,XX,LL,COLOR,0,LINE1 
DISP LINE+1,XX,LL,COLOR,0,LINE2 
DISP LINE+2,XX,LL,COLOR,0,LINE3 
MOV AH,09H 
LEA DX,ENDMESG 
INT 21H 
MOV AH,1 
INT 16H 
JNZ AGAIN 
MOV COUNT,0 
SS2: INC COUNT 
MOV CX,COUNT 
MOV AX,OFFSET KG+2 
ADD AL,KG+1 
ADC AH,0 
SUB AX,COUNT 
MOV TEMP,AX 
DISP LINE+1,I,CX,COLOR,1,TEMP 
CALL DELAY 
CMP CX,AL 
JNE SS2 
JMP S2 
S1: MOV AX,3 
INT 10H 
MOV AH,0AH 
LEA DX, MESG 
INT 21H 
JMP AGAIN 

S3: MOV AH,3 
INT 10H 
DISP LINE+0,XX,LL,COLOR,0,LINE1 
DISP LINE+1,XX,LL,COLOR,0,LINE2 
DISP LINE+2,XX,LL,COLOR,0,LINE3 
MOV COUNT,0 
SS3: INC COUNT 
MOV CX,COUNT 
MOV BP,OFFSET LINE4+L 
SUB BP,CX 
DISP LINE+1,I,CX,COLOR,1,BP 
CALL DELAY 
CMP COUNT,LL-1 
JNE SS3 
MOV AH,09H 
LEA DX,ENDMESG 
INT 21H 
MOV AH,1 
INT 16H 
JNZ TC 
JMP SSS3 

SSS3: MOV AH,3 
INT 10H 
DISP LINE+0,XX,LL,COLOR,0,LINE1 
DISP LINE+1,XX,LL,COLOR,0,LINE2 
DISP LINE+2,XX,LL,COLOR,0,LINE3 

S4: 
DISP LINE+1,I,CX,COLOR,0,LINE4 
DEC COUNT 
MOV CX,COUNT 

CALL DELAY 
CMP COUNT,L 
JNE S4 
JMP S3 
DELAY PROC 
PUSH CX 
PUSH DX 
MOV DX,10000 
D1: MOV CX,6801 
D2: LOOP D2 
DEC DX 
JNZ D1 
POP CX 
POP DX 
RET 
DELAY ENDP 


TC: MOV AH,4CH 
INT 21H 
CODE ENDS 
END BEG 

回复列表 (共8个回复)

沙发

这是关于运动字符的...

板凳

DISP  MACRO  Y,X,LENGTHS,COLOR,FLAG,VAR 下面加上
      ENDM
这个宏才完整,但它的内容是什么?

改过之后,你会发现另两个错误。它们是。。。还是等你把上面
的宏补全了再说吧!

3 楼

恩恩恩...然后呢...
真的有两个...

4 楼

从“DISP  MACRO  Y,X,LENGTHS,COLOR,FLAG,VAR”来看,
此宏是想在(X,Y)用某种颜色显示字符串,自然不能省略。

什么叫“运动字符”?让字符在屏幕上到处跑?

撇开语法错误,代码中还有些错误与算法有关;如三处跳转到AGAIN,
而这个AGAIN却没有着落!

另外,以前提到的两个错误虽属语法错误,在不了解算法的情况下,
却也不好改!

5 楼

就是输入一串字符,,然后让它动...

恩......就是比如慢慢移动之类的。.

6 楼

字符串动画显示 

1。菜单,内容包括:输入字符串 
字符串动画方式1 
字符串动画方式2 
退出 


2 输入字符串,选择该项后可以输入一个字符串,即为动画显示字符串 

3 字符串动画方式1:显示字符串在一矩形框内从无到有从左至右 移动 完全从框内移动出去 又从左至右移动,直到有任意键按下停止字符串动画返回菜单 

4 字符串动画方式2:显示字符串在矩形框内左右来回移动,左移到右侧边框自动右移,按任意键停止 返回菜单 

5 在菜单中选择退出项 则结束程序返回DOS

7 楼

满足1,2,5
部分满足4,
累死了!框架都有了,其它你自己补上吧!
disp macro row,col,color
local FastTextPrintLoop
        push ax bx cx dx bp si di es
        mov al,col
         mov bl,row
         
        xor bh,bh        
        shl bx,5         
        mov si,bx        
        shl bx,2         
        add bx,si        
        xor ah,ah        
        shl ax,1         
        add bx,ax        
        mov ax,0b800h
        mov es,ax        
        mov si,dx        

FastTextPrintLoop: 
       mov ah,ds:[si]
       mov es:[bx],ah
       inc si               
       inc bx            
       mov ah,color 
       mov es:[bx],ah    
       inc bx            
       loop FastTextPrintLoop
       pop es di si bp dx cx bx ax
     endm
;-----------------------------------------
.model small
.stack
.data
TOP DB 5 DUP(0AH)
    DB 31 DUP(' '),'MAIN MENU',0DH,0AH 
    DB 25 DUP(' '),201,21 DUP(205),187,0DH,0AH 
    DB 25 DUP(' '),186,' 1.INPUT THE STRING  ',186,0DH,0AH 
    DB 25 DUP(' '),186,' 2.DISPLAY MODEL ONE ',186,0DH,0AH 
    DB 25 DUP(' '),186,' 3.DISPLAY MODEL TWO ',186,0DH,0AH 
    DB 25 DUP(' '),186,' 4.RETURN DOS        ',186,0DH,0AH 
    DB 25 DUP(' '),200,21 DUP(205),188,0DH,0AH 
    DB 28 DUP(' '),'CHOCICE(1,2,3,4):$'

buf  db 10
len  db 0
str1 db 10 DUP(?)

x   db  0

.code
.386
start:
    mov  ax,@data
    mov  ds,ax
    
    lea  dx,TOP
    mov  ah,9
    int  21h
    
again:    
    mov  ah,7
    int  21h
    cmp  al,'1'
    jne  next2

    lea  dx,buf
    mov  ah,0ah
    int  21h

next2:
    cmp  al,'2'
    jne  next3
    lea  dx,str1
    xor  cx,cx
    mov  cl,len
    disp 1,0,5
    mov  ah,1
    int  16h
    jnz  again
    
next3:
    cmp  al,'3'
    jne  next4

n3:    
    lea  dx,str1
    xor  cx,cx
    mov  cl,len
    disp 10,x,4
    call delay
    disp 10,x,0
    call delay
    inc  byte ptr [x]
    mov  ah,1
    int  16h
    jnz  again
    jmp  n3

next4:
    cmp  al,'4'
    jne  again
    
    mov  ah,04ch
    int  21h
    
DELAY PROC 
    PUSH CX 
    PUSH DX 
    MOV  DX,8 
D1: 
    MOV  CX,0ffffh 
D2: 
    LOOP D2 
    DEC  DX 
    JNZ  D1 
    POP  CX 
    POP  DX 
    RET 
DELAY ENDP
    end  start

8 楼

感动死了~~~谢谢~~

我来回复

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