[065][汇编语言]实验13 编写、应用中断例程

(1)编写并安装int 7CH中断例程,功能为显示一个用0结束的字符串

实际运行

[065][汇编语言]实验13 编写、应用中断例程_第1张图片
实验13 (1)编写并安装int 7CH中断例程,功能为显示一个用0结束的字符串.png

完整源码

  • 应用程序文件
assume cs:code
data segment
    db 'Welcome to masm!',0
data ends

code segment
    start:  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
    code ends
    end start
  • 中断处理程序文件
assume cs:code
code segment
    start:  mov ax,cs
            mov ds,ax
            mov si, offset q1
            
            mov ax,0
            mov es,ax
            mov di,200H
            mov cx,offset q1end - offset q1
            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
            
        q1: mov ax,0B800H
            mov es,ax
            
            mov al,160
            mul dh
            mov di,ax
            
            mov al,2
            mul dl
            add di,ax
            
            mov al,cl
            s:  mov cl,[si]
                mov ch,0
                jcxz q1ret
                mov es:[di],cl
                mov es:[di+1],al
                inc si
                add di,2
                jmp short s
    
    q1ret:  iret
    q1end:  nop
    
    code ends
    end start

(2)编写并安装int 7CH中断例程,功能为完成loop指令的功能

[065][汇编语言]实验13 编写、应用中断例程_第2张图片
(2)编写并安装int 7CH中断例程,功能为完成loop指令的功能
  • 代码以及思路见 https://www.jianshu.com/p/6b00375b3046

(3)分别在屏幕的第2 4 6 8 行显示4句英文诗

实际运行

[065][汇编语言]实验13 编写、应用中断例程_第3张图片
实验13 (3)分别在屏幕的第2 4 6 8 行显示4句英文诗.png

完整源码

assume cs:code

code segment

        s1:        db 'Good,better,best,','$'
        s2:        db 'Never let it rest,','$'
        s3:        db 'Till good is better,','$'
        s4:        db 'And better,best.','$'
        s:         dw offset s1,offset s2,offset s3,offset s4
        row:       db 2,4,6,8
        
        start:  mov ax,cs
                mov ds,ax
                mov bx,offset s
                mov si,offset row
                mov cx,4
            ok: mov bh,0
                mov dh,[si]
                mov dl,0
                mov ah,2
                int 10H
                
                mov dx,[bx]
                mov ah,9
                int 21H
                add bx,2
                inc si
                loop ok
                
                mov ax,4c00H
                int 21H
            code ends
            end start
  • 使用 DOS int 21H 中断例程 ah=9号子程序,功能为在光标位置显示字符串 参考见 https://www.jianshu.com/p/b0b649c207dd

编程思想

  s:    dw offset s1,offset s2,offset s3,offset s4
  row:       db 2,4,6,8

偏移量也是数据
    mov si,offset row
    [si]
    inc si  
    依次取出的是 2 4 6 8  

int 21H  要求 DS:DX 指向字符串的首地址
    mov bx,offset s
    [bx]
    add bx,2
    不断指向新的字符串首地址
    

你可能感兴趣的:([065][汇编语言]实验13 编写、应用中断例程)