《汇编语言第三版》王爽学习历程——实验13

编写、应用中断例程

第一个中断例程:
要求:
编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。

汇编代码:

assume cs:codesg

codesg segment
        mov ax, cs
        mov ds, ax
        mov si, offset print_str    ;源地址

        mov ax, 0
        mov es, ax
        mov di, 200h                ;目标地址

        mov cx, offset print_str_end - offset print_str
        cld

        rep movsb

        mov word ptr es:[7ch*4], 200h
        mov word ptr es:[7ch*4+2], 0    ;设置中断向量表

        mov ax, 4c00h
        int 21h

 print_str: 
        push es
        push ax
        push bx
        push cx
        push dx     
        push di
        push si

        mov ax, 0b800h
        mov es, ax                   ;初始化显存

        mov al, 0a0h
        sub dh, 1
        mul dh
        mov bx, ax      ;行计算

        sub dl, 1
        add dl, dl
        mov dh, 0
        mov di, dx      ;列计算

        mov al, cl      ;输出颜色
        mov cx, 0       ;用作结束判断
        mov si, 0       ;字符串指针

   print_s:
        mov cl, [si]
        jcxz print_ok

        mov es:[bx][di], cl
        mov es:[bx][di+1], al
        inc si
        add di, 2       ;指针向后偏移

        jmp short print_s

   print_ok:
        pop si
        pop di
        pop dx
        pop cx
        pop bx
        pop ax
        pop es
        iret

   print_str_end:
        nop         ;空出一个字节来计算代码长度
codesg ends
end

运行结果:
《汇编语言第三版》王爽学习历程——实验13_第1张图片

第二个中断例程:
要求:
编写并安装int 7ch中断例程,功能为完成loop指令的功能。
参数:(cx)=循环次数,(bx)=位移。

汇编代码:

assume cs:code

code segment
 start:
        mov ax, cs
        mov ds, ax
        mov si, offset copy_loop

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

        mov cx, offset copy_loop_end - offset copy_loop
        cld

        rep movsb

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

        mov ax, 4c00h
        int 21h

------------------------------------------------
--------------------copy_loop-------------------
-------参数:(cx)=循环次数,(bx)=移动位移---------
------------------------------------------------
 copy_loop:
        push bp

        dec cx
        jcxz loop_ok            ;cx为0,循环结束

        add [bp+2], bx          ;IP+位移

   loop_ok:
        pop bp
        iret

   copy_loop_end:
        nop

code ends
end start

运行结果:
《汇编语言第三版》王爽学习历程——实验13_第2张图片

第三个中断例程:
空格一:[si]
空格二:[bx]
空格三:inc si
空格四:add bx, 2

你可能感兴趣的:(《汇编语言第三版》王爽学习历程——实验13)