. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  疑问:修改cmos时间  [已解决] 回复[ 8次 ]   点击[ 455次 ]  
ln_ydc
[帖 主]   [ 发表时间:2012-03-14 11:29 ]   [引用]   [回复]   [ top ] 
荣誉值:14
信誉值:10
注册日期:2010-03-02 17:00
assume cs:code
code segment
        start:
        mov al, 9
        out 70h, al
        in al, 71h        ;1)
        mov al, 11
        out 71h, al
        in al, 71h        ;2)
        mov ax, 4c00h
        int 21h
code ends
end start

执行完1),al为12
为什么执行完2), al还是12呢?
tomato
[第1楼]   [ 回复时间:2012-03-14 23:44 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
程序写的有问题,再认真看一下。
ln_ydc
[第2楼]   [ 回复时间:2012-03-15 22:41 ]   [引用]   [回复]   [ top ] 
荣誉值:14
信誉值:10
注册日期:2010-03-02 17:00
回复:[第1楼]
------------------
程序应该没问题吧!
assume cs:code
code segment
        start:
        mov al, 9
        out 70h, al
        inc cx
        in al, 71h   ;1)
        inc cx
        mov al, 11
        out 71h, al
        inc cx
        in al, 71h    ; 2)
        inc cx

        mov ax, 4c00h
        int 21h

code ends
end start

在in,out的下一步加inc cx, 为了查看状态避免cpu不响应单步中断


在dosbox中与在win7的command中分别debug,结果不一样的
我原先是在dosbox中做的实验,1),2)两处都是12
在win7的command中,2)处为11
tomato
[第3楼]   [ 回复时间:2012-03-15 23:59 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
out 71h, al 
这条指令的端口号是不是写错了?
ln_ydc
[第4楼]   [ 回复时间:2012-03-16 16:25 ]   [引用]   [回复]   [ top ] 
荣誉值:14
信誉值:10
注册日期:2010-03-02 17:00
70h 为地址端口
71h 为数据端口

往cmos ram的9号单元写入数据11
mov al, 9
out 70h, al
mov al, 11
out 71h, al

不是这个思路吗?
chinatree
[第5楼]   [ 回复时间:2012-03-16 17:15 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
out 70h, al
        inc cx
        in al, 71h   ;1)
这是读,写是 
out 70h, al
        inc cx
        Out al, 71h   ;1)
记得是这样。
tomato
[第6楼]   [ 回复时间:2012-03-16 22:50 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
回复4楼,这个你说的是对的。但是,你的
“ mov al, 11 
  out 71h, al 
  in al, 71h ”
程序中的“in al, 71h ”这条指令中的71h是不是有问题?
ln_ydc
[第7楼]   [ 回复时间:2013-08-11 00:00 ]   [引用]   [回复]   [ top ] 
荣誉值:14
信誉值:10
注册日期:2010-03-02 17:00
assume cs:code
code segment
        start:
        mov al, 9
        out 70h, al
        in al, 71h        ;1)
        mov al, 11
        out 71h, al
        in al, 71h        ;2)
        mov ax, 4c00h
        int 21h
code ends
end start

执行完1),al为12
为什么执行完2), al还是12呢?
------------------
回复:程序没问题,调试的时候在想看结果的话,在in/out指令后加个nop
因为in/out指令和向ss设值一样,跳过单步中断,直接执行下一步的
ln_ydc
[第8楼]   [ 回复时间:2013-08-11 00:02 ]   [引用]   [回复]   [ top ] 
荣誉值:14
信誉值:10
注册日期:2010-03-02 17:00
此贴由 贴主 于 [ 2013-08-11 00:02 ] 结贴。 结贴原因:问题已解决
得分情况: 7楼(ln_ydc):14分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved