使用x86汇编编写一个多线程、多任务系统 (七)

最后,就是在AP1和AP2上各自运行的两个用户进程了。

这两个用户进程的功能极度简单,就是调用BSP安装的0x80号系统调用,在指定的位置显示指定的字符而已:

task1.asm的代码:


;===============================================================================
;===                            该处开始用户代码                             ===
;===============================================================================
SECTION  task1  vstart=0x0
     [bits 32]

     print_letter   dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     debug_caller   dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子

_sleep:
    mov ebx, show_str
    mov eax, 396
    mov ecx, show_str    
    int 0x80
    
    mov ebx, show_str
    add ebx, 0
    mov al, [ebx]
    inc al
    cmp al, '9'
    jb _1
    mov al, '0'
_1:
    mov [ebx], al
    
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    jmp _sleep 

;----------------------------- 全局变量定义 ----------------------------------
align 4
    show_str db "0", 0x0, 0x0 ,0x0
     
;-------------------------------------------------------------------------------
SECTION core_trail
;-------------------------------------------------------------------------------
core_end:

task2.asm的代码:


;===============================================================================
;===                            该处开始用户代码                             ===
;===============================================================================
SECTION  task2  vstart=0x0
     [bits 32]

     print_letter   dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
     debug_caller   dd 0x0                   ;偏移(不用)
                    dw 0x0                   ;选择子
  
_sleep:
    mov ebx, show_str
    mov eax, 556
    mov ecx, show_str    
    int 0x80
    
    mov ebx, show_str
    add ebx, 0
    mov al, [ebx]
    inc al
    cmp al, 'Z'
    jb _1
    mov al, 'A'
_1:
    mov [ebx], al
    
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    jmp _sleep 

;----------------------------- 全局变量定义 ----------------------------------
align 4
    show_str db "A", 0x0, 0x0 ,0x0
     
;-------------------------------------------------------------------------------
SECTION core_trail
;-------------------------------------------------------------------------------
core_end:

以上就是本次多线程、多任务系统的全部代码,功能极度简单,整体也就是启动了三个线程,然后让每个线程都跑了起来。

俺的工作一直比较繁忙,晚上回到家还要带娃。对于编程也就是爱好,觉得看书调代码玩弄CPU比打游戏好玩多了,代码调通了还能有爽的感觉。

后面准备再研究一下如何通过汇编来做图,感觉这玩意儿能看得见,玩起来应该不枯燥。同时儿子也在学编程,给他做个榜样,别天天惦记着游戏,自己写个游戏比玩别人的游戏爽多了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值