汇编程序运行不了,那位老师能帮我看看完善一下程序该肿么写可以么?谢谢
我的汇编程序原代码如下,(这是一个图文显示的程序代码),不能运行,那位老师能帮我完善将不胜感激,急用,谢谢,谢谢
各模块详细设计
下面是整体的代码,各个子模块在程序中加以注释。
DATA SEGMENT
CAR DB 94 ;定义字符
DB 02H,122,-5,3
…
DB 02H,122,0,-1
CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS
STACKI SEGMENT
DB 2000 DUP (?)
STACKI ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKI
MAIN PROC FAR ;定义过程
PUSH DS
SUB AX,AX ;清0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,0 ;0号功能调用,设置显示模式
MOV AL,0 ;显示模式的属性为 320*200 4色
INT 10H ;10号中断调用,BIOS 對螢幕及顯 示器所提供的服務程式
MOV AH,0BH ;0B功能调用,设置调色板,背景色或边框
MOV BH,0 ;设置颜色
MOV BL,2 ;颜色
INT 10H
MOV AH,0BH
MOV BH,01 ;选择调色板
MOV BL,00 ;调色板00
INT 10H
CALL CLEAR_SCREEN ;调用清屏子程序
LEA DI,CAR
MOV DH,10
MOV DL,2
CALL MOVE_SHAPE
MOV AH,8 ;8号功能调用,无回显的字符的输入
INT 21H ;中断21
CMP AL,71H
JZ EXIT ;标志位结果为0转移
JB NEXT ;无符号数低于时转移
NEXT: CMP AL,51H
JZ EXIT
MAIN ENDP
CLEAR_SCREEN PROC NEAR ;清屏子程序
PUSH AX ;保护现场
PUSH BX
PUSH CX
PUSH DX
MOV AH,6 ;6号功能调用,初始化屏幕
MOV AL,0 ;清窗口
MOV CH,0 ;窗口的左上角位置(0,0)
MOV CL,0
MOV DH,120 ;右下角位置(200,120)
MOV DL,200
MOV BH,7 ;空白区域的缺省属性
INT 10H ;10号中断调用
POP DX ;恢复现场
POP CX
POP BX
POP AX
RET ;返回
CLEAR_SCREEN ENDP
DLY_QRTR PROC NEAR ;延时子程序
PUSH CX
PUSH DX
MOV DX,5000
D11: MOV CX,25000
D12: LOOP D12 ;循环25000次
DEC DX ;DX-1
JNZ D11 ;结果不为0时转移
POP DX
POP CX
RET
DLY_QRTR ENDP
MOVE_SHAPE PROC NEAR ;擦除子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AH,0FH ;读取显示器模式
INT 10H
SUB CH,CH ;清0
MOV CL,[DI]
INC DI ;DI+1
MOV CHAR_CNT,CX
MOV POINTER,DI
MOV LINE_ON,DH
MOV COL_ON,DL
MOV_CRSR:
ADD DH,[DI+2] ;Y坐标
ADD DL,[DI+3] ;X坐标
MOV AH ,2 ;用文本坐标下设置光标位置
INT 10H
MOV AL,[DI] ;字符
MOV BL,[DI+1] ;属性或颜色
PUSH CX
MOV CX,1 ;重复输出字符的次数
MOV AH,09 ;在当前光标处按指定属性显示字符
INT 10H
POP CX
ADD DI,4
LOOP MOV_CRSR
POP DI
POP DX
POP CX
POP BX
POP AX
RET
MOVE_SHAPE ENDP
EXIT: MOV AH,4CH ;终止当前程序并返回调用程序
INT 21H
CODE ENDS
END MAIN
要求显示输出“元旦”字样,
[解决办法]
文件功能上大致正常的吧,只是最后的结束按键判断流程上有不妥,但不会影响到显示。另外,也就是最重要的是待显示内容的点阵数据组织上,你的代码才两个点,还需要补全了。