鱼C论坛

 找回密码
 立即注册
查看: 657|回复: 0

[汇编作业] 实验16

[复制链接]
发表于 2023-3-3 00:17:03 | 显示全部楼层 |阅读模式

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

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

x
使用call指令直接调用标号不需要计算偏移量
  1. assume cs:code

  2. code segment
  3.     start:     mov  ax,0
  4.                mov  es,ax
  5.                mov  di,200H

  6.                mov  ax,cs
  7.                mov  ds,ax
  8.                mov  si,offset setscreen

  9.                mov  cx,offset int7ch_end-offset setscreen
  10.                cld
  11.                rep  movsb

  12.                mov  word ptr es:[7ch*4],200h
  13.                mov  word ptr es:[7ch*4+2],0h

  14.                mov  ax,4c00h
  15.                int  21h

  16.     ; 功能: 调用指定的子程序
  17.     ; 参数: (ah)=功能号(0-3)
  18.     ;      (al)=颜色值(0-7)
  19.     setscreen: cmp  ah,0
  20.                je   do1
  21.                cmp  ah,1
  22.                je   do2
  23.                cmp  ah,2
  24.                je   do3
  25.                cmp  ah,3
  26.                je   do4
  27.                jmp  short sret

  28.     do1:       call sub1
  29.                jmp  short sret
  30.     do2:       call sub2
  31.                jmp  short sret
  32.     do3:       call sub3
  33.                jmp  short sret
  34.     do4:       call sub4

  35.     sret:      iret

  36.     ; 清屏
  37.     sub1:      push bx
  38.                push cx
  39.                push es
  40.                mov  bx,0b800h
  41.                mov  es,bx
  42.                mov  bx,0
  43.                mov  cx,2000
  44.     sub1s:     mov  byte ptr es:[bx],' '
  45.                add  bx,2
  46.                loop sub1s
  47.                pop  es
  48.                pop  cx
  49.                pop  bx
  50.                ret

  51.     ; 设置前景色
  52.     sub2:      push bx
  53.                push cx
  54.                push es

  55.                mov  bx,0b800h
  56.                mov  es,bx
  57.                mov  bx,1
  58.                mov  cx,2000
  59.     sub2s:     and  byte ptr es:[bx],11111000b               ; 前景色置0
  60.                or   es:[bx],al                               ; 放入颜色值
  61.                add  bx,2
  62.                loop sub2s

  63.                pop  es
  64.                pop  cx
  65.                pop  bx
  66.                ret

  67.     ; 设置背景色
  68.     sub3:      push bx
  69.                push cx
  70.                push es
  71.                mov  cl,4
  72.                shl  al,cl
  73.                mov  bx,0b800h
  74.                mov  es,bx
  75.                mov  bx,1
  76.                mov  cx,2000
  77.     sub3s:     and  byte ptr es:[bx],10001111b               ; 背景色置0
  78.                or   es:[bx],al                               ; 放入背景色值
  79.                add  bx,2
  80.                loop sub3s
  81.                pop  es
  82.                pop  cx
  83.                pop  bx
  84.                ret

  85.     ; 向上滚动一行
  86.     sub4:      push cx
  87.                push si
  88.                push di
  89.                push es
  90.                push ds

  91.                mov  si,0b800h
  92.                mov  es,si
  93.                mov  ds,si
  94.                mov  si,160                                   ; ds:si指向n+1行
  95.                mov  di,0                                     ; es:di指向n行
  96.                cld
  97.                mov  cx,24

  98.     sub4s:     push cx
  99.                mov  cx,160
  100.                rep  movsb                                    ; n+1行覆盖到n行上
  101.                pop  cx
  102.                loop sub4s

  103.                mov  cx,80
  104.                mov  si,0
  105.     sub4s1:    mov  byte ptr [160*24+si],' '                 ; 最后一行清空
  106.                add  si,2
  107.                loop sub4s1

  108.                pop  ds
  109.                pop  es
  110.                pop  di
  111.                pop  si
  112.                pop  cx
  113.                ret
  114.     int7ch_end:nop
  115. code ends

  116. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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