[アセンブリ]マルチプロセス、マルチタスクの実現(.asmソースコード)

プロジェクト環境
  • コンパイル環境:nasm2.8コンパイル環境を構築します。
  • ミラーファイル:winhex_18.2を使用してコードブラッシングします。
  • 仮想マシン:Bochs-2.4.5が使用されます。
プロジェクトソフトウェア
運転結果

ここに画像の説明を挿入

プログラムのソースコード(.asm)
org 0x8400
start:
    sti    ;IF=1
    ;cli     ;IF=0
    mov ax,0xb800 ; 指向文本模式的显示缓冲区
    mov word [ds:0x22],0            ;
    mov es,ax

    mov ax,0
    mov ds,ax
    mov bx, 0

    call sleep
    mov word [ds:0x20],int_time0    ;20十六进制:32十进制,相当于中断表的第八个位置
    mov word [ds:0x22],0            ;

    call sleep
    mov word [ds:0x24],int_time1
    mov word [ds:0x26],0
    
    jmp $

    ; 默认 1/18 s
int_time0:
    mov byte [es:bx],"A"
    mov byte [es:bx+1],0x0a
    inc bx
    inc bx

int_time1:
    mov byte [es:bx],'1'
    mov byte [es:bx+1],0x0c
    inc bx
    inc bx
x1:
    mov al,0x20
    mov dx,0x20
    out dx,al               ;EOI = 1 中断结束
    iret                    ;

; 通过循环来延迟执行拆分时间片
sleep:
    push bx  ; 压栈
    mov bx, 0
x2:
    inc bx
    cmp bx, 128
    ja x2

    pop bx ; 出栈
	ret 

おすすめ

転載: blog.csdn.net/Gyangxixi/article/details/113613871
おすすめ