鱼C论坛

 找回密码
 立即注册
查看: 2020|回复: 1

关于 实验16 安装程序后 标号直接定址表 中位移出错

[复制链接]
发表于 2012-6-19 15:51:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ss:zhan

zhan segment
db 64 dup (' ')
zhan ends

code segment

start:
    mov ax,zhan
        mov ss,ax
        mov sp,64
    mov ax,200H
        mov es,ax
        mov ax,cs
        mov ds,ax
        mov si,offset s0
        mov di,0
        mov cx,offset s1 - offset s0
        cld
        rep movsb
        mov ax,0
        mov ds,ax
        cli
        mov word ptr ds:[7ch*4],200H
        mov word ptr ds:[7ch*4+2],0
        sti
       
       
          
        mov ax,4c00H
        int 21H
  
s0:jmp short sat           ; 中断程序 功能实现 4个子功能
  gnh_a dw zxc1,zxc2,zxc3,zxc4   ;错误在这  安装到 0:200H 后  标号指向的位移没变 但是用call 调用 却报错
     nop
         nop
         nop
         nop
         nopq
sat:push bx
     cmp ah,3
         ja et
         mov bl,ah
         mov bh,0
         add bx,bx
         call word ptr gnh_a[bx]                ;安装后  执行到这个指令后  IP跳飞了。。。。 不安装可以执行
  et:pop bx
     iret

  zxc4:      ;子程序4 功能号 AH 3    功能设置屏幕向下移动一行  
     push bx
         push cx
         push si
         push di
         push ds
         push es
         
         mov bx,0b800H
         mov es,bx
         mov ds,bx
         mov si,160
         mov di,0
         
         mov cx,24
zxc4s:push cx
         mov cx,160
         cld
         rep movsb
         loop zxc4s
         
         mov cx,80
         mov si,0
zxc4s1:mov byte ptr es:[160*24+si],' '
         add si,2
         loop zxc4s1
         
         pop es
         pop ds
         pop di
         pop si
         pop cx
         pop bx
         ret
         
  zxc3:      ;子程序3 功能号 AH 2    功能设置背景景色  参数al 传递颜色
     push bx
         push cx
         push es
         
         mov bx,0b800H
         mov es,bx
         mov bx,1
         mov cx,2000
zxc3s:and byte ptr es:[bx],10001111b
         or  es:[bx],al
         add bx,2
         loop zxc3s
         
         pop es
         pop cx
         pop bx
         ret
  
  zxc2:      ;子程序2 功能号 AH 1    功能设置前景色  参数al 传递颜色
     push bx
         push es
         push cx
     mov bx,0b800H
         mov es,bx
         mov bx,1
         mov cx,2000
zxc2s:and byte ptr es:[bx],11111000b
         or  es:[bx],al
         add bx,2
         loop zxc2s
         pop cx
         pop es
         pop bx
         ret
         
  zxc1:      ;子程序1  功能号 AH 0   功用清屏
     push ax
         push es
         push di
         push cx
         
     mov ax,0b800H
     mov es,ax
         
         mov di,0
         mov cx,2000
zxc1s:mov byte ptr es:[di],' '
         add di,2
         loop zxc1s
         
         pop cx
         pop di
         pop es
         pop ax
         ret
  s1:nop
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-19 15:57:03 | 显示全部楼层
是不是如果不进行安装的话      call word ptr gnh_a[bx]   编译器计算的位移是从这里开始算的。


如果是安装后的话    gnh_a dw zxc1,zxc2,zxc3,zxc4    编译器计算的位移是从这开始算的。




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-20 07:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表