汇编语言--实验十二

assume cs:code
  code segment
  start:
;do0安装程序-----------------
    mov ax,code
    mov ds,ax
    mov si,offset do0
    mov ax,0000
    mov es,ax
    mov di,0200h
    CLD
    mov cx,offset do0end-offset do0
    rep movsb
;do0安装结束-----------------

;设置0号中断程序入口---------
    mov ax,0
    mov es,ax
    mov word ptr es:[0000],200h
    mov ax,0000h
    mov word ptr es:[0002],0
;0号中断程序入口设置完毕-----

    mov ax,4c00h
    int 21h

do0:
    jmp short do0start
do0str:
    db "divide error!"
do0start:
    mov ax,cs
    mov ds,ax
    mov si,202h
    mov ax,0b800h
    mov es,ax
    mov di,12*160+66
    mov cx,13
s:
    mov al,ds:[si]
    mov es:[di],al
    inc si
    add di,2
    loop s

    mov ax,4c00h
    int 21h
do0end:
    nop

    code ends
    end start
  
  思考:代码中红色标注的202h是否可以用offset do0str代替?实际上我开始也是这么处理的,但测试运行后字符并未正确显示。原因在于该主程序在编译过程中offset db0str取得的是db字符串在该主程序中的偏移地址;在安装完do0后,触发除法溢出时候我们需要的是该字符串正确的固化的地址。

posted @ 2013-09-06 16:37  tsembrace  阅读(475)  评论(0编辑  收藏  举报