汇编网首页登录博客注册
zwz_good的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
友情链接

[2009-10-10 20:55] 检测点15.1

assume cs:code

data segment
  dw 8 dup (0)
data ends

code segment
start:
  mov ax, data
  mov ds, ax
  mov si, 0
  ;保存旧9号中断例程的入口地址
  mov ax, data
  mov ds, ax
  mov si, 0
  mov ax, 0
  mov es, ax
  mov ax, es:[9h*4]
  mov [si], ax
  mov ax, es:[9h*4+2]
  mov [si+2], ax
  ;填充新9号中断例程的入口地址
  cli  ;解答了第二小题。
  mov word ptr es:[9h*4], offset int9
  mov word ptr es:[9h*4+2], cs
  sti  ;解答了第二小题。

  mov ax, 0b800h
  mov es, ax
  mov ah, 'A'
s:
  mov es:[160*12+40*2], ah
  call delay
  inc ah
  cmp ah, 'Z'
  jna s

  ;还原旧9号中断例程的入口地址,保证程序退出后,系统的正常键盘处理。
  cli   ;解答了第二小题。
  mov ax, [si]
  mov es:[9h*4], ax
  mov ax, [si+2]
  mov es:[9h*4+2], ax
  sti  ;解答了第二小题。

  mov ax, 4c00h
  int 21h

delay:
  push ax
  push dx
  mov bx, 0h
  mov ax, 0h
delay1:
  sub ax, 1
  sbb dx, 1
  cmp ax, 0
  jne delay1
  cmp dx, 0
  jne delay1

  pop dx
  pop ax
  ret

int9:
  push ax
  push es
  ;调用旧9号中断例程
  ;1 标志寄存器入栈
  pushf
  ;设置标志寄存器中的IF=0, TF=0;此时已在中断例程中,无须再设置IF和TF位了.  解答了第一小题。
  ;pushf
  ;pop ax
  ;and ah, 11111100b
  ;push ax
  ;popf
  ;CS,IP入栈  调用中断例程
  call dword ptr ds:[0]

  in al, 60h
  cmp al, 1h
  jne int90
  ;ESC键按下,则
  mov ax, 0b800h
  mov es, ax
  inc byte ptr es:[160*12+40*2+1] 
int90:
  pop es
  pop ax
  iret

code ends
end start
评论次数(0)  |  浏览次数(471)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码