主题:汇编程序的连接,不会总出错
binfen2007
[专家分:0] 发布于 2005-12-07 20:59:00
这是一个敲击键盘发声程序
是由soundf 调用waitf
再由piano 程序调用soundf 程序实现键盘发声
PUBLIC waitf
C_SEG SEGMENT PARA'CODE'
ASSUME CS:C_SEG
waitf proc far
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
c_seg ends
end
----------------第一个程序结束
PUBLIC SOUNDF
EXTRN WAITF:FAR
C_SEG SEGMENT PARA'CODE'
ASSUME CS:C_SEG
soundf proc far
push ax
push bx
push cx
push dx
push di
mov al,0b6h
out 43h,al
mov dx,12h
mov ax,348Ch
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
wait1: mov cx,663
call waitf
dec bx
jnz wait1
mov al,ah
out 61h,al
pop di
pop dx
-----------------第二个程序
;piano
EXTRN SOUNDf:FAR
EXTRN WAITF:FAR
STACK SEGMENT STACK PARA 'STACK'
DB 64 DUP('STACK...')
STACK ENDS
DSEG SEGMENT PARA 'DATA'
TABLE DW 262
DW 294
DW 330
DW 349
DW 392
DW 440
DW 494
DW 523
DSEG ENDS
CSEG SEGMENT PARA 'CODE'
ASSUME SS:STACK,DS:DSEG,CS:CSEG
MAIN PROC FAR
MOV AX,DSEG
MOV DS,AX
MOV AX,STACK
MOV SS,AX
NEW_NOTE:
MOV AH,0
INT 16H
CMP AL,0DH
JE EXIT
MOV BX,OFFSET TABLE
CMP AL,'1'
JB NEW_NOTE
CMP AL,'8'
JA NEW_NOTE
AND AX,0FH
SHL AX,1
SUB AX,2
MOV SI,AX
MOV DI,[BX][DI]
MOV BX,10
CALL SOUNDF
JMP NEW_NOTE
EXIT:
MOV AX,4C00H
INT 21H
MAIN ENDP
CSEG ENDS
END MAIN
-------------主程序
连接的时候总是有问题,键盘也不可以发声音
谁帮忙看下啊,学妹感激不尽
回复列表 (共10个回复)
沙发
erping [专家分:3660] 发布于 2005-12-07 21:50:00
;main.asm
EXTRN soundf: FAR
EXTRN waitf: FAR
STACK SEGMENT STACK PARA 'STACK'
DB 64 DUP ('STACK...')
STACK ENDS
DSEG SEGMENT PARA 'DATA'
TABLE DW 262
DW 294
DW 330
DW 349
DW 392
DW 440
DW 494
DW 523
DSEG ENDS
CSEG SEGMENT PARA 'CODE'
ASSUME SS:STACK, DS:DSEG, CS:CSEG
MAIN PROC FAR
MOV AX, DSEG
MOV DS, AX
MOV AX, STACK
MOV SS, AX
NEW_NOTE:
XOR AH, AH
INT 16H
CMP AL, 0DH
JE EXIT
CMP AL, '1'
JB NEW_NOTE
CMP AL, '8'
JA NEW_NOTE
AND AX, 0FH
SHL AX, 1
SUB AX, 2
MOV SI, AX
MOV DI, [SI + TABLE]
MOV BX, 10
CALL soundf
JMP NEW_NOTE
EXIT:
MOV AX, 4C00H
INT 21H
MAIN ENDP
CSEG ENDS
END MAIN
板凳
erping [专家分:3660] 发布于 2005-12-07 21:50:00
;soundf.asm
PUBLIC soundf
EXTRN waitf: FAR
C_SEG SEGMENT PARA 'CODE'
ASSUME CS: C_SEG
soundf proc far
push ax
push bx
push cx
push dx
push di
mov al, 0b6h
out 43h, al
mov dx, 12h
mov ax, 348Ch
div di
out 42h, al
mov al, ah
out 42h, al
in al, 61h
mov ah, al
or al, 3
out 61h, al
wait1: mov cx, 663
call waitf
dec bx
jnz wait1
mov al, ah
out 61h, al
pop di
pop dx
pop cx
pop bx
pop ax
retf
soundf endp
C_SEG ends
end
3 楼
erping [专家分:3660] 发布于 2005-12-07 21:50:00
;waitf.asm
PUBLIC waitf
C_SEG SEGMENT PARA 'CODE'
ASSUME CS: C_SEG
waitf proc far
push ax
waitf1:
in al, 61h
and al, 10h
cmp al, ah
je waitf1
mov ah, al
loop waitf1
pop ax
retf
waitf endp
C_SEG ends
end
4 楼
erping [专家分:3660] 发布于 2005-12-07 21:52:00
给你提个建议吧,
以后写程序不要一会大写一会小写[em20],很难度的。
5 楼
binfen2007 [专家分:0] 发布于 2005-12-08 12:32:00
编译仍然不可以通过
6 楼
erping [专家分:3660] 发布于 2005-12-08 12:43:00
?
我编译成功
masm yourfile.asm
link main.obj+soundf.obj+waitf.obj
7 楼
天下着雨 [专家分:60] 发布于 2005-12-09 12:01:00
看来终生无望了!!
学这个以来没运行过一个程序,书上的抄上也没用!!
楼主能不能具体,具体,再具体啊!!能够体会一次,怎么也值啊!!
8 楼
binfen2007 [专家分:0] 发布于 2005-12-14 18:43:00
我编译了几次,还是通过不了
error:
there was 1 error detected
unresoulved externals
9 楼
erping [专家分:3660] 发布于 2005-12-14 20:24:00
不可能!!
asm 和 link 什么版本??
10 楼
binfen2007 [专家分:0] 发布于 2005-12-19 11:10:00
应该不是这样的问题吧
我的masm没有问题的
link也应该没有问题
我也不知道为什么?
QQ:295465467
我来回复