. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验十六遇到问题了,求助  [待解决] 回复[ 2次 ]   点击[ 593次 ]  
zy3287
[帖 主]   [ 发表时间:2008-11-26 16:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-17 17:25
这个是int 7ch的安装程序:

assume cs:code

  code segment
    
    start:
      mov ax,0
      mov es,ax
      mov di,0200h
      mov ax,cs
      mov ds,ax
      mov si,offset int7c
      mov cx,offset int7cend - offset int7c
      cld
      rep movsb

      mov word ptr es:[7ch*4],0200h
      mov word ptr es:[7ch*4+2],0

      mov ax,4c00h
      int 21h

    int7c:
      jmp short int7cstart
      table dw clear,setfg,setbg,rollup

    int7cstart:
      push bx
      cmp ah,3
      ja outint7c
      mov bl,ah
      mov bh,0
      add bx,bx

      call word ptr table[bx]

    outint7c:
      pop bx
      iret

    ;清屏子程序
    clear:
      push bx
      push cx
      push es

      mov bx,0b800h
      mov es,bx
      mov bx,0
      mov cx,2000
    clop:
      mov byte ptr es:[bx],' '
      add bx,2
      loop clop
      pop es
      pop cx
      pop bx
      ret

    ;设置前景色子程序
    setfg:
      push bx
      push cx
      push es

      mov bx,0b800h
      mov es,bx
      mov bx,1
      mov cx,2000
    fglop:
      and byte ptr es:[bx],11111000b
      or es:[bx],al
      add bx,2
      loop fglop

      pop es
      pop cx
      pop bx
      ret

    ;设置背景色子程序
    setbg:
      push bx
      push cx
      push es

      mov cl,4
      shl al,cl

      mov bx,0b800h
      mov es,bx
      mov bx,1
      mov cx,2000
    bglop:
      and byte ptr es:[bx],10001111b
      or es:[bx],al
      add bx,2
      loop bglop

      pop es
      pop cx
      pop bx
      ret

    ;向上滚动一行子程序
    rollup:
      push cx
      push ds
      push es
      push si
      push di

      mov si,0b800h
      mov ds,si
      mov es,si
      mov di,0
      mov si,160
      mov cx,24

    rolop:
      push cx
      mov cx,160
      cli
      rep movsb
      pop cx
      loop rolop

      mov si,160*24
      mov cx,80
    rocl:
      mov byte ptr es:[si],' '
      add si,2
      loop rocl
      pop di
      pop si
      pop es
      pop ds
      pop cx
      ret

    int7cend:
      nop

  code ends

end start
zy3287
[第1楼]   [ 回复时间:2008-11-26 16:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-17 17:25
这个是一个简单的测试int 7ch的代码,为什么中报错啊

assume cs:code

  data segment
    db 0,1,2,3
  data ends

  code segment

    start:
      mov ax,data
      mov ds,ax
      mov bx,0
      mov cx,4
      mov al,71h
    s:
      mov ah,[bx]
      int 7ch
      inc bx
      loop s
      
      mov ax,4c00h
      int 21h

  code ends

end start
acool
[第2楼]   [ 回复时间:2008-11-27 17:12 ]   [引用]   [回复]   [ top ] 
荣誉值:49
信誉值:0
注册日期:2008-10-15 16:15
楼主都说简单了,那么对“这个简单的程序”出的错误有什么看法呢?

首先完成书中给的代码的功能,即子程序。然后再完成实验。
注意:如果简单把书中的代码安装成中断会报错,原因可以用debug跟踪,好像是找不到子程序的地址吧~
为什么会这样,是什么原因导致的?如何解决。

这个解决方法在书中用过,学习书中的知识只是一部分,而学习方法,独立解决问题的能力都是需要从中锻炼的。

也推荐看看这个文章:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=6888&kindId=7280&postId=26522&readSg=1&vs=1

这个帖子也和楼主一样的问题:
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1017&qkSg=2&qID=27257&readSg=1
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved