请教众位高手!(SOS)

qingshujun 2000-09-13 10:45:00
下面这段发声程序为什麽一RUN就死机?
DATA SEGMENT PARA 'DATA'
MUS_FREQ DW 330,392,330,294,330,392,330,294,330
DW 330,392,330,294,262,294,330,392,294
DW 262,262,220,196,196,220,262,294,330,262
DW -1
MUS_TIME DW 3 DUP(50),25,25,50,25,25,100
DW 2 DUP(50,50,25,25),100
DW 3 DUP(50,25,25),100
DATA ENDS

STK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
TOS LABEL WORD
STK ENDS

CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,SS:STK,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STK
MOV SS,AX
MOV SP, OFFSET TOS

MUSIC PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA SI,DS:MUS_FREQ
LEA BP,DS:MUS_TIME

FREQ:
MOV DI,[SI]
CMP DI,-1
JE END_MUS
MOV BX,DS:[BP]
CALL GENSOUND
ADD SI,2
ADD BP,2
JMP FREQ

END_MUS:
RET
MUSIC ENDP

GENSOUND PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI

MOV AL,0B6H
mov dx,43h
OUT dx,AL


;MOV DX,12H ;原书用这段代码,但明显AX overflow,故我将其改为下面一段代码.
;MOV AX,533H*896
;DIV DI
;OUT 42H,Al
;MOV al,ah
;OUT 42H,al

mov dx,12h
mov ax,533h
mov cx,896
mul cx
mov cx,di
div cx
out 42h,al
mov al,dl
out 42h,al

IN AL,61H ;save the mode and turn on the speaker.
MOV AH,AL
OR AL,3
OUT 61H,AL

WAIT1:MOV CX,2801
DELAY:LOOP DELAY
DEC BX
JNZ WAIT1

MOV AL,AH
OUT 61H,AL

POP DI
POP DX
POP CX
POP BX
POP AX
RET
GENSOUND ENDP

CODE ENDS

END START



...全文
102 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wonny 2000-09-30
  • 打赏
  • 举报
回复
程序好出自哪本教材,用 CV 调试一下就行了。这年头玩汇编的人太少了。

21,453

社区成员

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

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