|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一天坐网吧里正刻苦‘学习’时,看见机箱里面的风扇周围有个光圈,白色的光圈里面有段红光在环绕,心想这肯定也是用汇编代码实现的,那是怎么实现的呢?
所以才有了第一次编写的汇编程序。
写的很粗糙的也很简单,但前几章能用的知识都用上了,感觉相对寻址很麻烦不能ds:[dx+di],段寄存器不能直接做运算很不灵活,判断语句更是麻烦,延迟完全不会精准到毫秒,很有很多很多的常量,剩下的就都是思路问题也没什么好抱怨得了
- assume cs:code,ds:data,ds:color,,ds:zuobiao,ss:sta
- data segment
- db' a '
- db' a a '
- db'a a'
- db' a a '
- db' a '
- data ends
- color segment
- db 77 ;
- color ends
- zuobiao segment
- db 5,3,1,3,5,7,9,7,5 ;最低点1 最高点9 中间点5
- zuobiao ends
- sta segment ;作废,懒得写了
- db 16 dup (0)
- sta ends
- code segment
- start:
- mov ax,data
- mov ds,ax
- mov ax,color
- mov es,ax
- mov dl,es:[0]
- mov ax,0b872h
- mov es,ax
- mov cx,5
- mov bx,0
- s:
- push cx
- mov cx,5
- f:
- mov al,[bx]
- mov es:[di],al
- inc bx
- inc di
- mov al,dl
- mov es:[di],al
- inc di
- loop f
-
- sub di,10
- add di,160
-
- pop cx
- loop s
- ;以上为建图
- ;--------------------------
- ;以下为光标循环
- mov ax,0;在栈内创建一个空间用来存 循环状态码
- push ax
- mov bp,sp
-
- all:mov di,0
- mov si,0
- mov ax,zuobiao
- mov ds,ax
- mov ax,0
- mov dx,0
-
- half:mov cx,4
- fo:
- push cx
- mov ah,0
- mov al,ds:[si]
- add di,ax
- inc si
- mov byte ptr es:[di],byte ptr 77h;变白
- call de;延迟
-
- mov byte ptr es:[di],byte ptr 77 ;回复
- sub di,ax
-
- mov cx,ss:[bp]
- jcxz jia
- sub di,160 ;第一次运行该循环add向下 第二次运行sub向上
-
- hui:pop cx
- loop fo
-
- inc dx ;以除法取余判断单双次运行循环
- mov ax,dx
- mov dh,2
- div dh
- mov ss:[bp],ah
- mov dh,0
-
- mov cx,ss:[bp]
- jcxz all ;循环运行两次后从头再来
-
-
- jmp half ;循环第一次运行 从一半开始
-
- mov ax,4c00h;作废
- int 21h
-
- jia:add di,160
- jmp hui
-
- de:
- MOV BX,0FH
- D1: MOV CX,0FFFFH
- D2: LOOP D2
- DEC BX
- JNZ D1
- ret
-
- code ends
- end start
复制代码 |
|