Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 386, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

中断程序的编写(汇编)

  • movsd以双字为单位进行移动
一 中断处理过程(和iret命令过程相反):
1、获取中断码n
2、flag(标志)寄存器入栈
3、CS、IP入栈
4、设置IP=4*n  CS=4*n+2
二 中断处理程序编写
1、mov ax,cs
     mov ds,ax
     mov si,offset sqr   ;设置ds:si指向sqr源地址
2、mov ax,0
     mov es,ax
3、mov  di,200h      ;设置es:di指向目标地址
     mov cx,offset  sqrend-offset sqr   ;设置cx为传输长度  offset设置偏移地址
4、cld                     ;设置传输方向为正向
     rep movsb          ;将sqr代码送至0:200h
                              ;rep是重复repeat(重复)的缩写,是重复执行指令的前缀。用于重复执行后面的指令,它通过设置cx来控制重复次数
                              ;movsb以字节为单位进行移动  movsd以双字为单位进行移动 movsw以字为单位进行移动
5、mov ax,0
    mov es,ax
    mov word ptr es:[7ch*4],200h              ;设置中断向量表
    mov word ptr es:[7ch*4+2],0                ;设置中断向量表
6、mov ax,4c00h  ;也可以写成mov AH
    int 21h            ;DOS系统功能调INT 21H功能中的一种,表示带返回码结束用户程序
                           ;AH、功能、调用参数、返回参数
                          ;AH存入00,功能:程序终止(同INT 20H),调用参数:CS=程序段前缀
                           ;AH存入01,功能:键盘输入并回显,调用参数:AL=输入字符
                          ;AH存入02,功能:显示输出,调用参数:DL=输出字符。
                           ;AH存入03,功能:异步通迅输入,调用参数:AL=输入数据。
                          ;AH存入04,功能:异步通迅输出,调用参数:DL=输出数据

7、sqr: mul ax     ;无符号乘法
            iret         ;IRET(interrupt return)中断返回,推入堆栈的段地址和偏移地址弹出,使程序返回到原来发生中断的地方。其作用是从中断中恢复中断前的状态
                          ;功能 恢复IP:pop IP;  恢复CS:pop CS;  恢复中断前标志寄存器装态popf;恢复ESP(返回权限发生变化);恢复SS(返回权限发生变化)   
8、sqrend:nop    ;空指令 什么都不做,但是会占用一个指令的时间;用于程序指令的对齐,比如字对齐

posted on 2023-11-10 22:44 Benjamin 阅读(12) 评论(0)  编辑 收藏 引用 所属分类: (反)汇编


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理