汇编学习(八)8086汇编拾遗 (7)

原创 2016年05月31日 20:50:59
int 中断指令

使用方式:

int n.  n 为中断类型码,它的功能是引发中断,n 为引发的中断号。

先写一个中断程序的例子吧,安装中断7ch 中断例程,计算一个字型数的平方。
assume cs:code

code segment

    start:
        mov ax,cs
        mov ds,ax
        
        mov si,offset sets
        mov di,200h
        mov ax,0
        mov es,ax
        mov cx,offset sets0 - offset sets
        cld
        rep movsb

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

        mov ax,4c00h
        int 21h

    sets:
        mul ax
        iret

    sets0:nop

code ends

end start
再来一个转换字符串的中断。 功能:将一个全是子母,以0结尾的字符串转换为大写。
assume cs:code

code segment

    start:
        mov ah,2
        mov bh,0
        mov dh,5
        mov dl,12
        int 10h
        
        mov ah,9
        mov al,'a'
        mov bl,11001010b
        mov bh,0
        mov cx,3
        int 10h


        mov ax,4c00h
        int 21h

code ends
end start
使用int 模拟 loop
assume cs:code

code segment
    start:
        mov ax,cs
        mov ds,ax
        mov ax,0
        mov es,ax
        mov si,200h
        mov di,offset se

        mov cx,offset se0 - offset se

        rep movsb

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

        mov ax,4c00h
        int 21h

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

    se0:
        nop

code ends
end start
编写7CH中断实现jmp near ptr s   功能:
assume cs:code

data segment

    db 'conversion',0

data ends

code segment

    start:
        mov ax,cs
        mov ds,ax
        mov si,offset se
        mov ax,0
        mov es,ax
        mov di,200h
        mov cx,offset se0 - offset se 

        rep movsb

        mov ax,0
        mov es,ax
        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7ch*4+2],0
        
        mov ax,data
        mov ds,ax
        mov si,0
        mov ax,0b800h
        mov es,ax
        mov di,12*160
      s:
        cmp byte ptr [si],0
        je ok
        mov al,[si]
        mov es:[di],al
        inc si
        add di,2
        mov bx,offset s - offset ok
        int 7ch
     ok:
        mov ax,4c00h
        int 21h


    se:
        push bp
        mov  bp,sp
        add  [bp+2],bx
        pop bp
        iret

    se0:nop

code ends
end start
编写并安装7ch中断,直到0结束的字符串
assume cs:code

data segment

    db 'weclome to linux world!',0

data ends

code segment

    start:
        mov ax,cs                ;添加中断代码
        mov ds,ax
        
        mov si,offset se 
        mov di,200h

        mov ax,0
        mov es,ax
        mov cx,offset se0 - offset se 
        
        cld 
        rep movsb

        mov ax,0                 ;设置中断号
        mov es,ax
        mov word ptr es:[7ch * 4],200h
        mov word ptr es:[7ch * 4 + 2],0
    
        mov dh,10                ;测试代码
        mov dl,10
        mov cl,2
        mov ax,data
        mov ds,ax
        mov si,0
        int 7ch



        mov ax,4c00h
        int 21h

    se:
        mov al,160           ;设置es:0b800h         
        mul dh
        add dl,dl
        mov dh,0
        add ax,dx
        mov di,ax
        mov ax,0b800h
        mov es,ax
      s:
        mov al,ds:[si]       ;打印字符
        mov ah,0
        cmp ax,0
        je f
        mov ah,cl 
        mov es:[di],ax
        inc si
        inc di
        inc di
        jmp s
      f:
        iret

    se0:nop


code ends
end start
编写7C 中断,打印80个!
assume cs:code

code segment

    start:
        mov ax,cs                       ;安装中断
        mov ds,ax
        mov si,offset lp

        mov ax,0
        mov es,ax
        mov di,200h

        mov cx,offset lpend - offset lp
        cld
        rep movsb

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

        mov ax,0b800h                   ;设置es
        mov es,ax
        mov di,160*12
        mov bx,offset s -offset se 
        mov cx,80
        s:
            mov byte ptr es:[di],'!'
            add di,2
            int 7ch
        se:
            nop

        mov ax,4c00h
        int 21h

        lp:
            push bp                     ;循环 
            dec cx
            jcxz f
            mov bp,sp
            add [bp+2],bx
        f:
            pop bp
            iret
        lpend:nop

code ends
end start
 

查看原文:http://zmrlinux.com/2016/05/31/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%ef%bc%88%e5%85%ab%ef%bc%898086%e6%b1%87%e7%bc%96%e6%8b%be%e9%81%97-7/
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

8086汇编基础 win7安装dosbox 教程

镇场诗:慈心积善融学习,技术誓为大家学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 ——————————————————————————————————————————————...

《汇编语言》王爽 实验7 基于8086汇编代码

可以用emu8086或者debug查看运行结果,以下是我的代码: assume cs:codesg,ds:datasg,ss:stacksg datasg segment db '197...

汇编学习笔记----8086CPU的段寄存器

(1)在8086CPU中,它是16bit结构,一次可以传送一个字的数据,但其地址总线有20根,一次可以传送2的20次方的数据 也就是说它的寻址能力为1MB,很明显,如果将地址从CPU内部简单的发出来...

我的汇编学习之行(2)-8086寄存器简介

寄存器寄存器是什么呢?其实很简单,寄存器就是个存储信息的单元或者说是器件又或者说是容器而已,就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多,只不过寄存器(这里讨论的...

8086汇编学习笔记——0

1.一些符号的约定 1)address 表示某个内存单元的相对于寄存器的偏移地址 2.汇编指令 1)mov: mov ax,bx ;将bx中的内容...
  • lomwyz
  • lomwyz
  • 2015年11月27日 22:53
  • 209

8086汇编学习笔记8-转移指令

修改IP,或同时修改CS和IP的指令称为转移指令 只修改IP时,称段内转移,段内转移又分为短转移和近转移,是根据IP修改范围不同而区分的,短转移修改IP范围为-128~127,近转移修改IP范围为-...

汇编学习--8086CPU基础

CPU的主要部件是寄存器

8086汇编学习之[BX],CX寄存器与loop指令,ES寄存器等

一、汇编程序的基本格式:1、基本格式与解析:assume cs:codeseg //assume假设CS寄存器与codeseg段有关联,codeseg段本就是代码段codeseg segment ...

8086汇编学习之转移指令的原理分析

(一)、8086汇编学习之基础知识、通用寄存器、CS/IP寄存器与Debug的使用 (二)、8086汇编学习之DS寄存器、SS/SP寄存器 (三)、8086汇编学习之[BX],CX寄存器与lo...

8086汇编学习之DS寄存器、SS/SP寄存器

相关博客:8086汇编基础知识、通用寄存器、CS/IP寄存器与Debug的使用 一、DS寄存器一个8086CPU寄存器均是16位的,而数据类型有以下两种: 1Byte = 8bit (字节型数据)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编学习(八)8086汇编拾遗 (7)
举报原因:
原因补充:

(最多只允许输入30个字)