| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 466 人关注过本帖
标题:pc机通信查询
只看楼主 加入收藏
Sliverwang
Rank: 2
等 级:论坛游民
帖 子:49
专家分:43
注 册:2011-4-1
结帖率:77.78%
收藏
已结贴  问题点数:0 回复次数:1 
pc机通信查询
CODE   SEGMENT
             ASSUME  CS: CODE
START:
            ;初始化波特率除数寄存器
             MOV DX , 3FBH        ;指向线路控制寄存器
             MOV AL , 80H           ;位7置1
            OUT DX , AL              ;发送此字节
            MOV DX , 3F9H         ;指向波特率除数的最高有效位
            MOV AL , 0                 ; 1200 BPS对应的最高有效位
            OUT DX , AL              ;发送此字节
            DEC DX                       ;指向波特率除数的最低有效位
            MOV AL , 60H             ; 1200 BPS对应的最低有效位
            OUT DX , AL               ;发送此字节
            ;初始化线路控制寄存器:
            MOV AL , 1BH            ;数据长度为8位 , 1个奇偶校验位 , 偶校验 , 1个停止位
            MOV DX , 3FBH         ;指向线路控制寄存器
            OUT DX , AL               ;发送此字节
            ;初始化中断允许寄存器
            MOV DX ,  3F9H         ;指向中断允许寄存器
            MOV AL ,  0                 ;禁止所有中断
            OUT DX , AL               ;发送字节
READ:      ;线路状态检测循环
             MOV DX , 3FDH        ;指向线路状态寄存器
             IN AL , DX                  ;取状态字节
             TEST AL , 1EH           ;检查错误
             JNZ ERROR                ;若出错则转错误处理例程
             TEST AL , 01H            ;测试是否已收到数据
              JNZ RECEIVE            ;转接收例程
             TEST AL , 20H           ;测试是否可以发送字符
              JNZ  SEND                 ;若是转发送例程
              JMP READ                 ;循环检测
SEND:       ;发送字符(来自键盘):
              MOV AH , 1               ;BIOS功能用以检测是否有字符可读
              INT 16H                     ;BIOS键盘中断
              JZ  READ                   ;若无击键则返回循环
              MOV AH , 0               ;BIOS功能用于取击键码
              INT 16H                     ;击键码现在AL中
              CMP AL , 03H           ;检测CTRL+C
               JZ EXIT                     ;若是 , 转EXIT处结束程序
              MOV DX , 3F8H        ;指向发送保持寄存器
              OUT DX , AL             ;发送字符
               JMP  READ               ;返回循环
RECEIVE:        ;接收数据(在屏幕上显示):
               MOV DX , 3F8H       ;接收数据寄存器
               IN  AL , DX               ;取新收到的字符
               CMP AL , 03H           ;检测CTRL+C
               JZ  EXIT                     ;若是 , 转EXIT处结束程序
               MOV DL , AL            ;准备显示字符
               MOV AH , 2               ;用于显示字符的DOS中断
               INT 21H                     ;显示字符
               CMP AL , 0DH          ;判断刚才收到的字符是否为回车
               JNZ READ                 ;不是,转线路检测循环
               MOV DL , 0AH         ;若是,则加显示一个换行符
               MOV AH , 2
               INT 21H
               JMP READ                ;返回线路检测循环
 ERROR:           ;出错处理,显示一个提示
                PUSH CS
                POP DS
                MOV DX , OFFSET ERROR_MESSAGE
                MOV AH , 9
                INT 21H         
EXIT:                ;程序退出
                MOV AH , 4CH
               INT 21H
 ERROR_MESSAGE DB 0AH , 'ERROR!$'         ;定义出错时显示的提示
CODE    ENDS
               END   START

汇编是新手刚开始学习


    想发散一下思路 怎么改这个代码

 我想问一下 如果不用检测CTRL+C 用别的话 代码是什么样的 例如alt+c什么的呢? 能改吗? 谢谢各位
搜索更多相关主题的帖子: 波特率 寄存器 CODE 通信 
2011-05-04 16:02
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:10 
程序代码:
C:\>debug
-a 0100
0B78:0100 mov ah,0
0B78:0102 int 16
0B78:0104 int 3
0B78:0105
-g 4
;按alt+c
AX=2E00  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000   ;看ax的值
DS=0B78  ES=0B78  SS=0B78  CS=0B78  IP=0104   NV UP EI PL NZ NA PO NC  
0B78:0104 CC            INT     3

技术问题,请不要以短消息方式提问
2011-05-05 21:31
快速回复:pc机通信查询
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033444 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved