采用INT 10H功能显示移动的字母

lxj9148282 2016-05-23 11:37:01
采用INT 10H功能显示移动的字母
...全文
957 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxj9148282 2016-05-27
  • 打赏
  • 举报
回复
能给个截图嘛
zara 2016-05-24
  • 打赏
  • 举报
回复
在个位置显示那字母,延时会儿,在新的位置显示那字母,在原位置显示空格(也可以在显示自己的字母前保留原来的字母,然后这里进行恢复显示)。
大致流程就是这样,涉及到定位光标到指定位置,在光标处显示字符(如果采用上面括号里的方法还涉及到个读取光标位置字母的功能调用);这些都是有特定的功能调用的;光标位置的变化以形成移动效果,这个更简单了,比如水平方向增 1 或垂直方向增 1。
baidu_23107797 2016-05-24
  • 打赏
  • 举报
回复
随便写一个吧,一个O在屏幕上游走,字符和颜色可改,任意键离开

data  segment
 Chars db 'O'  ;字符 
 Color db 04  ;颜色 : 红
 DelayTime dw 1  ;迟时 1/18秒
 Rows db 12
 Cols db 0
 pos dw 0  ;字符水平位置
 HDirect dw 1  ;水平方向  ,右为1 , 左为 -1
 VDirect dw 1  ;垂直方向  ,下为1 , 上为 -1
 DisplayStr db 79 dup (20h) ,0
data ends

CODE segment
assume  cs:code, ds:data
start: 
 mov ax,data
 mov ds,ax  
 mov es,ax
 Call ClrScr ;清屏
 mov cx,3031h ;关光标
 Call SetCurSz  
Next:
 mov ah,1 ;检查键盘输入
 int 16h
 jz next2 ;没有
 mov ah,0 ;读键
  int 16h
 jmp short quit ;任何键也离开
next2:
 mov ax,DelayTime    ;延时ax /18秒
 Call delay_proc ;延时
 Call ClearStr ;显示字符串
 Call DispStr ;显示字符串
 Call NewStr ;制作新字符
 Call NewRows
 Call DispStr ;显示字符串
 jmp short Next
quit:
 mov cx,0c0dh  ;正常光标
 Call SetCurSz  ; 开启光标
 mov ah,4ch ;离开
 int 21h
;----------------------------------------------------------------------------------
NewStr:
 Call ClearStr
 mov ax,HDirect ;方向
 add ax,pos  ;加上位置
 jnz New3  ;是否到了左边界,0则到了
 Neg HDirect ;到了,反向
 jmp short New4
New3:
 cmp ax,79 ;是否到了右边界
 jb New4  ;未
 Neg HDirect  ;到了,反向
New4:
 mov pos,ax ;存新位置
 mov di,offset DisplayStr
 add di,ax ;决定那个位置放字符
 mov al,Chars ;字符
 mov [di],al ;放字符
 ret
;----------------------------------------------------------------------------------
NewRows:
 mov al,Rows
 mov ah,0
 add ax,VDirect
 jnz NewR10
 Neg VDirect
 jmp short NewR20
NewR10:
 cmp ax,22
 jb NewR20
 Neg VDirect
NewR20:
 mov Rows,al
 ret
;----------------------------------------------------------------------------------
delay_proc: ;延迟子程式,  延迟   ax/18秒
 push es
 push dx 
 mov dx,40h
 mov es,dx
 mov dx,es:[006ch] ;取系统1/18秒计数
 add dx,ax  ; 延时 x/18
delay10: 
 cmp es:[006ch],dx ;时限到了?
 jbe delay10  ;没
 pop dx
 pop es
 ret
;-------------------------
ClrScr: ;清屏
  mov ax,0600h       ;cls
  mov bh,7       ;normal attribute
  mov cx,0       ;top left
  mov dx,6079       ;bottom right
  int 10h
  mov ah,02       ;move curvor to left top
  mov bx,0       ;zero page
  mov dx,0000       ;top left
  int 10h
 ret
;-------------------------------------------------------------------------------
SetCurSz:  ;设定光标大小
  mov ah,01h
  int 10h
 ret
;-------------------------------------------------------------------------------
DispStr:  ;以int 10h , ah=13h显示es:bp指向的字符串
 mov dh,rows
 mov dl,cols
 mov bh,0
 mov bl,color
 mov cx,79
 mov bp,offset DisplayStr
 mov ax,1300h
 int 10h
 ret
;------------------------------------------------------------------------------
ClearStr:
 mov di,offset DisplayStr
 mov cx,79
 mov al,20h
 rep stosb  ;清除字符串
 ret
;------------------------------------------------------------------------------

code ends
end start

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧