鱼C论坛

 找回密码
 立即注册
查看: 2664|回复: 1

[学习笔记] 学到第10章了 突发奇想写个小程序 以作练习

[复制链接]
发表于 2019-10-18 10:25:31 | 显示全部楼层 |阅读模式

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

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

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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-18 18:22:14 From FishC Mobile | 显示全部楼层
在网吧学习,你真吊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 14:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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