检测点13.1

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. 第一题

7ch 中断例程实现 loop 的功能,则上面的 7ch 中断例程所能进行的最大转移位移是多少?

(1)、 此中断例程实现的是 loop 功能,而 loop 是短转移指令,
      范围为 [-128,+127], 所以从这个角度来看,最大转移位移是128.

(2)、 从bx 的角度来看,若视bx为有符号数,则bx的范围为 [-32768,+32767] ,
      此时最大转移为 32768 ;若视bx为无符号数,则bx的范围为 [0,65535], 此时最大转移为 65535 .
2. 用 7ch 中断例程完成 jmp near ptr s 指令功能,用 bx 向中断例程传送转移位移。

应用举例:在屏幕的第 12 行,显示 data 段中以 0 结尾的字符串

assume cs:code

data segment
         db 'conversation',0
data ends

code segment
    start:
          mov  ax,cs
          mov  ds,ax
          mov  si,offset nr
          mov  ax,0
          mov  es,ax
          mov  di,200h
          mov  cx,offset nrend-offset nr
          cld
          rep  movsb

    ;以上9句为安装中断例程
          mov  word ptr es:[7ch*4],200h
          mov  word ptr es:[7ch*4+2],0

    ;以上2句为设置中断向量
          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

    nr:   push bp                           ; 定义中断例程[开始]
          mov  bp,sp
          add  [bp+2],bx

    nrret:
          pop  bp
          iret                              ; 中断返回指令

    nrend:
          nop                               ; 定义中断例程[结束]

code ends
end start