QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
36
查看: 92|回复: 0

查表不会

[复制链接]
最佳答案
0 
累计签到:26 天
连续签到:1 天
yc哈哈哈 发表于 2018-2-11 11:46:58 920 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
  1. setscreen: jmp short set

  2.     table  dw sub1,sub2,sub3,sub4

  3. set:       
  4.         push bx       
  5.         cmp ah,3                ;判断传递的是否大于 3
  6.         ja sret
  7.         mov bl,ah
  8.         mov bh,0
  9.         add bx,bx                ;根据ah中的功能号计算对应子程序的地址在table表中的偏移
  10.        
  11.         call word ptr table[bx]        ;调用对应的功能子程序

  12. sret:       
  13.         pop bx       
  14.         iret

  15. ;功能子程序1:清屏
  16. sub1:   
  17.         push bx
  18.         push cx
  19.     push es
  20.         mov bx,0b800h
  21.         mov es,bx
  22.         mov bx,0
  23.         mov cx,2000
  24.        
  25. sub1s:  
  26.         mov byte ptr es:[bx],' '
  27.     add bx,2
  28.     loop sub1s
  29.     pop es
  30.     pop cx
  31.     pop bx
  32.         ret ;sub1 ends

  33. ;功能子程序2:设置前景色
  34. sub2:       
  35.         push bx
  36.         push cx
  37.         push es
  38.         mov bx,0b800h
  39.         mov es,bx
  40.         mov bx,1
  41.         mov cx,2000
  42.        
  43. sub2s:       
  44.         and byte ptr es:[bx],11111000b       
  45.         or es:[bx],al
  46.         add bx,2
  47.         loop sub2s

  48.         pop es
  49.         pop cx
  50.         pop bx
  51.         ret ;sub2 ends

  52. ;功能子程序3:设置背景色
  53. sub3:       
  54.         push bx
  55.         push cx
  56.         push es
  57.         mov cl,4
  58.         shl al,cl
  59.         mov bx,0b800h
  60.         mov es,bx
  61.         mov bx,1
  62.         mov cx,2000
  63.        
  64. sub3s:       
  65.         and byte ptr es:[bx],10001111b
  66.         or es:[bx],al
  67.         add bx,2
  68.         loop sub2s

  69.         pop es
  70.         pop cx
  71.         pop bx
  72.         ret ; sub3 ends

  73. ;功能子程序4:向上滚动一行
  74. sub4:       
  75.         push cx
  76.         push si
  77.         push di
  78.         push es
  79.         push ds

  80.         mov si,0b800h
  81.         mov es,si
  82.         mov ds,si
  83.         mov si,160                        ;ds:si指向第n+1行
  84.         mov di,0                        ;es:di指向第n行
  85.         cld
  86.         mov cx,24;共复制24行

  87. sub4s:       
  88.         push cx
  89.         mov cx,160
  90.         rep movsb                         ;复制
  91.           pop cx
  92.         loop sub4s

  93.         mov cx,80       
  94.         mov si,0
  95.        
  96. sub4s1:
  97.         mov byte ptr es:[160*24+si],' '                ;最后一行清空
  98.         add si,2
  99.         loop sub4s1

  100.         pop ds
  101.         pop es
  102.         pop di
  103.         pop si
  104.         pop cx
  105.         ret ;sub4 ends
复制代码


每个子程序能看懂,合起来加上查表,这段有点蒙:

set:       
        push bx       
        cmp ah,3                ;判断传递的是否大于 3
        ja sret
        mov bl,ah
        mov bh,0
        add bx,bx                ;根据ah中的功能号计算对应子程序的地址在table表中的偏移
       
        call word ptr table[bx]        ;调用对应的功能子程序

sret:       
        pop bx       
        iret
尤其这几句:
mov bl,ah
        mov bh,0
        add bx,bx                ;根据ah中的功能号计算对应子程序的地址在table表中的偏移
       
        call word ptr table[bx]        ;调用对应的功能子程序
希望大神解答,每步都详细点,谢谢
楼层
跳转到指定楼层

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /2 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-2-20 15:16

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