帮忙看下这段汇编代码错误!!

zhouhui1102 2009-06-22 12:39:49
MYSTACK SEGMENT STACK
DB 1024 DUP(?)
MYSTACK ENDS

MYDATA SEGMENT
MENUSTR QUITSTR DB 0DH,0AH,'THANK YOU FOR PLAYING MY GAME',0DH,0AH,'$'
SIGN_QUIT DB 00H
TEMP DB 00H
HIGH DB 0
LOW DB 0
KEYBOARD DW 12E0H,10D1H,0EFBH,0E24H,0C99H,0B39H,0A00H
MYDATA ENDS

MYCODE SEGMENT
ASSUME CS:MYCODE,DS:MYDATA,ES:MYDATA,SS:MYSTACK

MAIN PROC FAR
PUSH DS
MOV AX,00H
PUSH AX ;SAVE PSP START ADDR

MOV AX,MYDATA
MOV DS,AX

MOV AL,10110110B
OUT 43H,AL

CALL INITPROG

IN AL,61H
AND AL,0FCH
OUT 61H,AL

MAINLOOP: CALL MAINTASK

IN AL,61H
OR AL,03H
OUT 61H,AL

MOV AL,SIGN_QUIT
CMP AL,00H
JZ MAINLOOP

CALL RESTOREPROG
RET

MAIN ENDP

SD_3: JMP SOUND_3
SD_4: JMP SOUND_4
SD_5: JMP SOUND_5
SD_6: JMP SOUND_6
SD_7: JMP SOUND_7
H_5: JMP HIGH_5
H_6: JMP HIGH_6
H_7: JMP HIGH_7

MAINTASK PROC NEAR
MOV AH,00H
INT 16H

CMP AL,'A'
JZ SOUND_1
CMP AL,'S'
JZ SOUND_2
CMP AL,'D'
JZ SD_3
CMP AL,'F'
JZ SD_4
CMP AL,'G'
JZ SD_5
CMP AL,'H'
JZ SD_6
CMP AL,'J'
JZ SD_7

CMP AL,'Q'
JZ HIGH_1
CMP AL,'W'
JZ HIGH_2
CMP AL,'E'
JZ HIGH_3
CMP AL,'R'
JZ HIGH_4
CMP AL,'T'
JZ H_5
CMP AL,'Y'
JZ H_6
CMP AL,'U'
JZ H_7


CMP AL,'Z'
JZ LOW_1
CMP AL,'X'
JZ LOW_2
CMP AL,'C'
JZ LOW_3
CMP AL,'V'
JZ LOW_4
CMP AL,'B'
JZ LOW_5
CMP AL,'N'
JZ LOW_6
CMP AL,'M'
JZ L_7

CMP AL,27 ;ESC=>QUIT
JZ MTASK_8

JMP MAINTASK
L_7: JMP LOW_7
MTASK_8: JMP MAINTASK_8

LOW_1: MOV LOW,0FFH
JMP SOUND_1
HIGH_1: MOV HIGH,0FFH
SOUND_1: MOV TEMP,0
CALL LOAD
RET

LOW_2: MOV LOW,0FFH
JMP SOUND_2
HIGH_2: MOV HIGH,0FFH
SOUND_2: MOV TEMP,1
CALL LOAD
RET

LOW_3: MOV LOW,0FFH
JMP SOUND_3
HIGH_3: MOV HIGH,0FFH
SOUND_3: MOV TEMP,2
CALL LOAD
RET

LOW_4: MOV LOW,0FFH
JMP SOUND_4
HIGH_4: MOV HIGH,0FFH
SOUND_4: MOV TEMP,3
CALL LOAD
RET

LOW_5: MOV LOW,0FFH
JMP SOUND_5
HIGH_5: MOV HIGH,0FFH
SOUND_5: MOV TEMP,4
CALL LOAD
RET

LOW_6: MOV LOW,0FFH
JMP SOUND_6
HIGH_6: MOV HIGH,0FFH
SOUND_6: MOV TEMP,5
CALL LOAD
RET

LOW_7: MOV LOW,0FFH
JMP SOUND_7
HIGH_7: MOV HIGH,0FFH
SOUND_7: MOV TEMP,6
CALL LOAD
RET

MAINTASK_8: MOV SIGN_QUIT,0FFH
MAINTASK_9: RET

MAINTASK ENDP

LOAD PROC NEAR
PUSH AX
PUSH DX
PUSH SI ;目的函数不改变寄存器值
MOV DL,TEMP
ADD DL,DL
AND DX,000FH ;防止出错,万一DX越界无关
MOV SI,OFFSET KEYBOARD
ADD SI,DX
MOV AL,[SI]
MOV AH,[SI+1]
PUSH AX

MOV AL,HIGH
CMP AL,00H
JZ NEXT_1
POP AX
SHR AX,1
PUSH AX
MOV HIGH,00H

NEXT_1: MOV AL,LOW
CMP AL,00H
JZ NEXT_2
POP AX
SHL AX,1
PUSH AX
MOV LOW,00H

NEXT_2: POP AX
MOV DX,42H
OUT DX,AL

MOV AL,AH
OUT DX,AL
POP SI
POP DX
POP AX
RET
LOAD ENDP


INITPROG PROC NEAR
MOV AX,SEG MENUSTR
MOV DS,AX

MOV DX,OFFSET MENUSTR

MOV AH,09H
INT 21H

RET
INITPROG ENDP

RESTOREPROG PROC NEAR
MOV AX,SEG QUITSTR
MOV DS,AX
MOV DX,OFFSET QUITSTR

MOV AH,09H
INT 21H

IN AL,61H
AND AL,0FCH
OUT 61H,AL

MOV SIGN_QUIT,00H

RET
RESTOREPROG ENDP

MYCODE ENDS

END MAIN
...全文
80 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouhui1102 2009-06-22
  • 打赏
  • 举报
回复
请用masm 或 masmplus编译 在线等!!!!!!

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧