鱼C论坛

 找回密码
 立即注册
查看: 3951|回复: 4

汇编------实验16

[复制链接]
发表于 2011-9-21 20:00:47 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code

code segment
start:
      mov ax,cs
      mov ds,ax
   mov ax,0
   mov es,ax
   mov si,offset int7c   ;将新的int 7ch中断程序传入0:200处
   mov di,200h
   mov cx,offset int7cend-offset int7c
   cld
   rep movsb
      
;在中断向量表中设置新的int 7ch中断例程的入口地址   
   cli
   mov word ptr es:[7c*4+2],0
   mov word ptr es:[7c*4],200h   
   sti
   
      
   
   mov ax,4c00h
   int 21h
;新的int 7c中断例程?  
   org 200h         ;有些网友说要加上org,但是加了还是不行啊
int7c:
      jmp short s
      data dw sub1-s+200h,sub2-s+200h,sub3-s+200h,sub4-s+200h

s:    push bx
      cmp ah,3
      ja ok              ;判断ah中的功能号是否大于3
   mov bl,ah
   mov bh,0
   add bx,bx           ;计算对应子程序在data表中的偏移
   call word ptr data[bx]   ;调用对应的功能子程序
ok:   pop bx
      iret
;功能:清屏
sub1: push ax
      push es
   push di
   push cx
   mov ax,0b800h
   mov es,ax
   mov cx,2000
   mov di,0
s5:   mov byte ptr es:[di],' '   
   add di,2
   loop s5
   pop cx
   pop di
   pop es
   pop ax
   ret
   
;设置前景色,al传送颜色值,(al)∈{0,1,2,3,4,5,6,7}   
sub2: push ax
      push es
   push bx
   push di
      mov bl,al
   mov ax,0b800h
   mov es,ax
   mov di,1
   mov cx,2000
s0:   and byte ptr es:[di],11111000b
      or es:[di],bl   
   add di,2
   loop s0
   pop di
   pop bx
   pop es
   pop ax
   ret
   
;设置背景色,al传送颜色值,(al)∈{0,1,2,3,4,5,6,7}   
sub3: push ax
      push es
      push bx
      push di   
   mov cl,4
   shl al,cl
   mov bl,al
   mov ax,0b800h
   mov es,ax
   mov di,1
      mov cx,2000
s1:   and byte ptr es:[di],10001111b
      or es:[di],bl      
   add di,2
   loop s1
   pop di
   pop bx
   pop es
   pop ax
   ret
   
;向上滚动一行   
sub4: push ax
      push di
      push bx
      push si
   push ds
      mov ax,0b800h
      mov es,ax
      mov ds,ax   
   mov si,160
   mov di,0
   cld
   mov cx,24
   
s2:   push cx
      mov cx,160
      rep movsb
   pop cx
   loop s2
   
   mov cx,80
s3:   mov byte ptr es:[160*24+si],' '
   add di,2  
   loop s3
   pop ds
   pop si
   pop bx
   pop di
   pop ax
   ret
int7cend:nop
      
   
code ends
end start


我这个程序哪里错了啊,编译过了,但是测试的时候,总是跳不到int 7ch中断显示
Y~_JRB@EJP)}P9CZXC_[M%6.jpg
希望大家帮帮忙啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-22 01:27:44 | 显示全部楼层
换MASM5.0试试,记得用6.5经常报这个错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-10 21:45:55 | 显示全部楼层
亲,我想问一下 data dw sub1-s+200h,sub2-s+200h,sub3-s+200h,sub4-s+200h这句是什么意思哦,sub1这个已经是一个地址也还要减s的地址再加200h???不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2016-7-31 11:18:33 | 显示全部楼层
C开头 发表于 2012-9-10 21:45
亲,我想问一下 data dw sub1-s+200h,sub2-s+200h,sub3-s+200h,sub4-s+200h这句是什么意思哦,sub1这个已经 ...

这些代码是放在0:200的地址位置的,但是如果不减s+200 那你看看它现在的偏移地址对吗,减s是计算函数到开头的距离,距离完成之后,因为你将这些代码放在的200的偏移地址中,所以你得加上200才是正确的偏移地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-13 21:21:35 | 显示全部楼层
1366627538 发表于 2016-7-31 11:18
这些代码是放在0:200的地址位置的,但是如果不减s+200 那你看看它现在的偏移地址对吗,减s是计算函数到开 ...

data[bx]这里实际上是[bx+data],就算sub1-s+200h也影响不到这里的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-23 15:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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