[어셈블리 언어] Wang Shuang 저 | 실험 13: 인터럽트 프로그램 작성 및 적용

서문: 이 실험은 Mr. Wang Shuang이 저술한 "어셈블리 언어" 제3판의 실험 13 입니다 (p262).

실험 환경: DOSBox 0.74-3

실험 작업:

(1) int 7ch 인터럽트 루틴을         작성하고 설치하십시오 . 기능은 0으로 끝나는 문자열을 표시하는 것이며 인터럽트 루틴은 0:200 에 ​​설치됩니다 .

        매개 변수: (dh)=행 번호, (dl)=열 번호, (cl)=색상, ds:si는 문자열의 첫 번째 주소를 가리킵니다.

        위의 인터럽트 루틴을 설치한 후 아래 프로그램을 단계별로 따르십시오. 특히 int 및 iret 명령 실행 전후에 CS, IP 및 스택 상태를 관찰하십시오.

cs:code
데이터 세그먼트
    db "masm에 오신 것을 환영합니다!",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
코드 종료
종료 시작

인터럽트 프로그램 설치 코드:

assume cs:code

code segment
start: ;安装7ch中断例程
       mov ax,cs
       mov ds,ax
       mov si,offset do7ch
       mov ax,0
       mov es,ax
       mov di,200h
       mov cx,offset do7chend - offset do7ch
       cld
       rep movsb

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

       mov ax,4c00h
       int 21h

do7ch: push ax
       push es
       push dx
       push di
       push cx
       push si
       ;将程序使用到的寄存器入栈保存
       
       mov ax,0b800h
       mov es,ax
       mov al,160
       mul dh  ;160 x 行号 
       add al,dl  ;160 x 行号 + 列号
       adc ah,0
       mov di,ax  ;di为字符显示位置
       ;es:di指向字符显示位置
 
    s: mov al,[si]
       cmp al,0
       je ok  ;为0则字符串结束
       mov es:[di],al
       mov es:[di+1],cl
       inc si
       add di,2
       jmp short s

   ok: pop si 
       pop cx
       pop di
       pop dx
       pop es
       pop ax
       ;恢复寄存器原始值
       
       iret

       mov ax,4c00h
       int 21h

do7chend: nop

code ends
end start

테스트 프로그램 실행 결과:

추천

출처blog.csdn.net/Amentos/article/details/127335096