汇编网首页登录博客注册
sissim的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
友情链接

[2010-02-16 15:21] 检测点14.1

(1)读取CMOS RAM的2号单元的内容。
首先在debug中用a命令将指令写入内存,用t命令执行。
D:\masm>debug
-a
0B00:0100 mov al,2
0B00:0102 out 70,al
0B00:0104 in al,71
0B00:0106
-t

AX=0002  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B00  ES=0B00  SS=0B00  CS=0B00  IP=0102   NV UP EI PL NZ NA PO NC
0B00:0102 E670          OUT     70,AL
-t

AX=0047  BX=0000  CX=0000  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
DS=0B00  ES=0B00  SS=0B00  CS=0B00  IP=0107   NV UP EI PL NZ NA PO NC
0B00:0107 8946F8        MOV     [BP-08],AX            SS:FFF8=0012
-q
执行out指令之后,ip就变成0107了,有指令连续执行,看不到结果。

再编写成程序如下:
         assume  cs:code
code    segment
start:  mov     al,2
        out     70h,al
        in      al,71h
        mov     ax,4c00h
        int     21h
code    ends
        end     start
汇编连接之后,用debug调试。
D:\masm>debug ce14_1.exe
-u0 9
0B60:0000 B002          MOV     AL,02
0B60:0002 E670          OUT     70,AL
0B60:0004 E471          IN      AL,71
0B60:0006 B8004C        MOV     AX,4C00
0B60:0009 CD21          INT     21
-t

AX=0002  BX=0000  CX=000B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=0002   NV UP EI PL NZ NA PO NC
0B60:0002 E670          OUT     70,AL
-t

AX=4C00  BX=0000  CX=000B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=0009   NV UP EI PL NZ NA PO NC
0B60:0009 CD21          INT     21
-q
指令连续执行了,看不到结果。
于是在mov ax,4c00h之前加上一条nop指令:
D:\masm>debug ce14_1.exe
-u0 a
0B60:0000 B002          MOV     AL,02
0B60:0002 E670          OUT     70,AL
0B60:0004 E471          IN      AL,71
0B60:0006 90            NOP
0B60:0007 B8004C        MOV     AX,4C00
0B60:000A CD21          INT     21
-t

AX=0002  BX=0000  CX=000C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=0002   NV UP EI PL NZ NA PO NC
0B60:0002 E670          OUT     70,AL
-t

AX=0049  BX=0000  CX=000C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=0007   NV UP EI PL NZ NA PO NC
0B60:0007 B8004C        MOV     AX,4C00
-q
这下能看到了,al=49h。看看屏幕右下角的时钟,刚好是14:49。

(2)编程,向CMOS RAM的2号单元写入0。
程序如下:
        assume  cs:code
code    segment
start:  mov     al,2
        out     70h,al
        mov     al,0
        out     71h,al
        mov     ax,4c00h
        int     21h
code    ends
        end     start
汇编连接运行之后,屏幕右下角时钟没有变化。不知道是不是写进去了。于是增加了修改al,从71h中读出的指令,发现果然是修改过了。可是为什么时钟没有变化呢?
D:\masm>debug ce14_2.exe
-u 0 10
0B60:0000 B002          MOV     AL,02
0B60:0002 E670          OUT     70,AL
0B60:0004 B000          MOV     AL,00
0B60:0006 E671          OUT     71,AL
0B60:0008 B005          MOV     AL,05
0B60:000A E471          IN      AL,71
0B60:000C 90            NOP
0B60:000D B8004C        MOV     AX,4C00
0B60:0010 CD21          INT     21
-t

AX=0002  BX=0000  CX=0012  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=0002   NV UP EI PL NZ NA PO NC
0B60:0002 E670          OUT     70,AL
-t

AX=0000  BX=0000  CX=0012  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=0006   NV UP EI PL NZ NA PO NC
0B60:0006 E671          OUT     71,AL
-t

AX=0005  BX=0000  CX=0012  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=000A   NV UP EI PL NZ NA PO NC
0B60:000A E471          IN      AL,71
-t

AX=0000  BX=0000  CX=0012  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B50  ES=0B50  SS=0B60  CS=0B60  IP=000D   NV UP EI PL NZ NA PO NC
0B60:000D B8004C        MOV     AX,4C00
-q

D:\masm>
评论次数(0)  |  浏览次数(1169)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码