mт、__宠爱 发表于 2011-9-21 20:00:47

汇编------实验16

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:,0
   mov word ptr es:,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   ;调用对应的功能子程序
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:,' '   
   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:,11111000b
      or es:,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:,10001111b
      or es:,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:,' '
   add di,2
   loop s3
   pop ds
   pop si
   pop bx
   pop di
   pop ax
   ret
int7cend:nop
      
   
code ends
end start


我这个程序哪里错了啊,编译过了,但是测试的时候,总是跳不到int 7ch中断显示

希望大家帮帮忙啊

小甲鱼 发表于 2011-9-22 01:27:44

换MASM5.0试试,记得用6.5经常报这个错误

C开头 发表于 2012-9-10 21:45:55

亲,我想问一下 data dw sub1-s+200h,sub2-s+200h,sub3-s+200h,sub4-s+200h这句是什么意思哦,sub1这个已经是一个地址也还要减s的地址再加200h???不懂

1366627538 发表于 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才是正确的偏移地址。

Type_def 发表于 2020-8-13 21:21:35

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

data这里实际上是,就算sub1-s+200h也影响不到这里的值
页: [1]
查看完整版本: 汇编------实验16