スタックを用いたサブルーチンへの引数渡し
アセンブリコード
; subcall.asm ; ; サブルーチンにスタックを使用してパラメータを渡す ; void subRoutine(char, char)といったところか bits 16 org 0x100 mov ax, 0x0200 ; これはグローバルにアクセス可能とする mov bx, 0x41 ; パラメータその1 mov cx, 0x42 ; パラメータその2 push bx ; サブルーチンではこの順番と逆に受け取る push cx ; 8bitのレジスタはpushできない call subRoutine mov ax, 0x4C00 int 0x21 subRoutine: push bp ; ベーシックポインタをとりあえず保存 mov bp, sp ; スタックポインタを移す sub sp, 0x40 ; 現時点ではおまじない、残念 mov cx, [bp+4] ; パラメータその2 mov bx, [bp+6] ; パラメータその1 mov dx, bx ; 表示させるためにコピー int 0x21 ; レジスタAXはグローバルな感じで mov dx, cx int 0x21 mov sp, bp ; "sub sp, 0x40"の取り消しらしい pop bp ret ; 呼び出し元へ復帰する
実行結果
D:\asmwork>nasm -f bin subcall.asm -o subcall.com D:\asmwork>subcall.com AB D:\asmwork>
"sub sp, 0x40"というのがまだ良く分からない.再起呼び出しをするサブルーチンを作ろうとしたが現時点では出来ず.