系统的简单注解 - 17 用户进程2的代码

本文介绍了一个使用汇编语言编写的程序,该程序实现在屏幕右下角快速交替显示不同颜色的矩形块,每种颜色显示100毫秒。程序首先获取窗口的基本信息,然后在窗口中央绘制矩形,并通过改变颜色实现闪烁效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



该进程在屏幕右下角快速闪烁不同颜色的矩形块。颜色的切换时间为100毫秒。

;===============================================================================
;=== 本程序为用户程序,在屏幕右下角快速闪烁不同颜色的矩形块                  ===
;===============================================================================    
;===============================================================================
;===                            该处开始用户代码                             ===
;===============================================================================
SECTION  core  vstart=0x0
     [bits 32]

     point_caller   dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     back_caller    dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     rect_caller    dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     cmd_caller     dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     win_caller     dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     res1_caller    dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     res2_caller    dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     res3_caller    dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     
     ;获取进程窗口的基本信息(左上角坐标和窗口长宽度)
     xor eax, eax                            ;eax-高16位为x的宽度,低16位为x的值
     xor ebx, ebx                            ;ebx-高16位为y的高度,低16位为y的值	  
     call far [win_caller] 					
     
     ;记录窗口坐标和宽高
     mov ecx, ebx
     shr ecx, 16
     mov [_y_len], ecx                        ;记录窗口高度
     and ebx, 0xffff
     mov [_y_base], ebx                       ;左上角y坐标
	 
     mov ecx, eax
     shr ecx, 16
     mov [_x_len], ecx                        ;记录窗口宽度
     and eax, 0xffff
     mov [_x_base], eax                       ;左上角x坐标
	 
     ;计算当前操作的坐标
     mov eax, [_x_base]
     mov ebx, [_x_len]
     shr ebx, 1
     add eax, ebx
     mov [_x_], eax
     mov eax, [_y_base]
     mov ebx, [_y_len]
     shr ebx, 1
     add eax, ebx	 
     mov [_y_], eax

     ;窗的正中画一矩形
     mov eax, 8
     shl eax, 16
	 mov ax, [_y_]
     mov ebx, 8
     shl ebx, 16	 
     mov bx, [_x_]
     mov cl, 3
     call far [rect_caller]                   
	 
_sleep:
     ;矩形消失
     mov eax, 8
     shl eax, 16
	 mov ax, [_y_]
     mov ebx, 8
     shl ebx, 16	 
     mov bx, [_x_]
     mov cl, [_color]
     call far [rect_caller]
	 ;休眠100毫秒
     mov eax, 10
     call far [back_caller]
     mov cl, [_color]
     inc cl
     cmp cl, 15
     jna _again
     mov cl, 0
_again:
     mov [_color], cl 
     jmp _sleep	 

;-------------------------------------------------------------------------------
     _color  db 1,0,0,0
     _x_	 dd 160                           ;x坐标
     _y_     dd 100		                      ;y坐标
     _x_base dd 0x0                           ;窗口左上角x的值
     _y_base dd 0x0                           ;窗口左上角y的值	 
     _x_len  dd 0x0                           ;窗口宽度
     _y_len  dd 0x0                           ;窗口高度
     _cmd    db 0,0,0,0
     _count  dd 0x0                           ;重绘的次数	
	
;-------------------------------------------------------------------------------
SECTION core_trail
;-------------------------------------------------------------------------------
core_end:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值