中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-01 18:45
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 汇编语言的求肋 查看 1,257 回复 1
楼 主 汇编语言的求肋 发表于 2006-06-07 17:51 ·  中国 广东 广州 海珠区 电信
新手上路
积分 8
发帖 2
注册 2006-05-25 20:54
20年会员
UID 56000
性别 男
状态 离线
汇编语言的求肋

我写了段串行通信的代码,在输入时,能顺利编译通过,但是在DEBUG时,输入后,就提错。我搞不清楚错在哪,请高手们帮帮忙!!谢谢!!

代码如下:

;通信子程序
;初始化:波特率为9600 b/s,发送数据字长为8bit,2位停止位,偶校验,不使用中断方式
;(接收字符时)入口:无,出口:屏幕显示字符,AH最高位为1时出错
;(发送字符时)入口:字符从键盘输入,出口:AH最高位为1时出错
;每次只接收/发送一个字符
;
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
;
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
SERIAL: MOV DX,3FBH
MOV AL,10000000B ;置DABL=1,允许访问BRD
OUT DX,AL
MOV DX,3F8H
MOV AL,0CH ;波特率为9600 b/s,BRDH=00h,BRDL=0Ch
OUT DX,AL ;写BRD
MOV DX,3F9H
MOV AL,00H
OUT DX,AL
MOV DX,3FBH
MOV AL,00011111B ;写LCR
OUT DX,AL
MOV AL,0
MOV DX,3F9H ;写IER
OUT DX,AL
CHECK: MOV DX,3FDH
IN AL,DX
TEST AL,00011110B ;检查LSR,BI=0?FE=0?PE=0?OE=0?
JNZ ERR ;转到出错
TEST AL,01H
JNZ RECEI;转到接收
TEST AL,20H
JNZ TRANS ;转到发送
; WAIT ;循环等待
; JMP CHECK
RECEI: MOV DX,3FCH
MOV AL,1 ;置DTR=1
OUT DX,AL
MOV DX,3FEH
IN AL,DX ;检查DSR=1?
TEST AL,00100000B
JZ ERR
MOV DX,3FDH
IN AL,DX ;检查DR=1?
TEST AL,00000001B
JZ ERR
MOV DX,3F8H
IN AL,DX ;接收并显示
MOV DL,AL
MOV AH,2
INT 21H
JMP QUIT ;接收完毕,退出
TRANS: MOV DX,3FCH
MOV AL,00000011B ;置RST=1,DTR=1
OUT DX,AL
MOV DX,3FEH
IN AL,DX
TEST AL,00110000B ;检查CTS=1?DSR=1?
JZ ERR
MOV DX,3F8H
IN AL,DX
TEST AL,00100000B ;检查THRE=1?
JZ ERR
MOV AH,1
INT 21H
MOV DX,3F8H
OUT DX,AL
JMP QUIT
ERR: OR AH,80H ;出错置AH最高位为1
JMP QUIT
QUIT: MOV AH,4CH
INT 21H ;返回
CODE ENDS
END SERIAL

请高手们帮忙完善一下!!!最好能发送多个字符~~~!!!

谢谢高手们~~~~!!

期待……
2 发表于 2006-06-08 12:42 ·  中国 广东 广州 海珠区 电信
新手上路
积分 8
发帖 2
注册 2006-05-25 20:54
20年会员
UID 56000
性别 男
状态 离线
怎么回事,家里的高手哪去了???
论坛跳转: