int指令和端口

int指令

格式:int n (n为中断类型码)

功能:引发中断过程

执行过程:

  • 取出中断类型码n
  • 标志寄存器入栈,IF=0,TF=0
  • CS、IP入栈
  • (IP)=(n*4)、(CS)=(n*4+2)

int可以调用任何中断程序。

int指令的最终功能和call类似,都是调用一段程序。

 

系统将一些具有一定功能的子程序以中断处理程序的方式提供给应用程序调用。

 

调用供应用程序调用的中断例程

assume cs:code
code segment
start : mov ax,3456
        int 7ch
        add ax,ax
        mov ax,4cooh
        int 21h
code ends
end start

安装中断7ch中断例程

assume cs:code
code segment
start : mov ax,cs
        mov ds,ax
        mov si,offset sqr
        mov ax,0
        mov es,ax
        mov di,200h
        mov cx,offset sqrend -offset sqr
        cld
        rep movsb

        mov ax,0
        mov es,ax
        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7cg*4+2],0

        mov ax,4c00h
        int 21h
sqr:    mul ax
        iret
sqrend: nop
code ends
end start

 

对int,iret和栈的深入理解

用7ch中断例程完成loop指令的功能

loop执行需要两个信息:循环次数和到s的位移

用cx存放循环次数,用bx存放位移

7ch例程应具有的功能

  • dec cx
  • 如果(cx=0,转到s处执行,否则向下执行)

 

中断例程如何得到标号s的段地址和偏移地址?

使用栈。

用iret指令,我们可以将栈中的se的偏移地址加上bx的转移位移,最终得到s的偏移地址。

lp:     push bp
        mov bp,sp
        dec cx
        jcxz lpret
        add [bp+2],bx
 lpret: pop bp
        iret

端口

CPU可以直接读写3个地方的数据:

  • CPU内部寄存器
  • 内存单元
  • 端口

端口的读写

in和out指令

in(CPU<--端口)    out (CPU-->端口)

 

访问端口

例:in al,60h

执行时操作:

  • CPU通过地址线将地址信息60h发出
  • CPU通过控制线发出端口读命令,选中端口所在的芯片。
  • 60h端口数据通过数据线送入CPU

注意:在in和out指令中,只能使用ax或al来存放读写数据。

shl和shr指令

shl 逻辑左移指令

功能:

  • 将一个寄存器或内存单元中的数据向左位移
  • 将最后移出的一位写入CF中
  • 最低位用0补充

例:

shl al,cl

将x逻辑左移一位,相当于执行x=x*2

shr指令和shl相反。

 

CMOS RAM中存储的时间信息

00h
02h
04h
07h
08h
09h

以BCD码方式存放 (0~9)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值