From 8dcbdc997cd13cb3934bf4354900030e424ca387 Mon Sep 17 00:00:00 2001 From: greg Date: Tue, 10 Nov 2015 02:46:54 -0800 Subject: [PATCH] Return from assembly Show calling an assembly fn and returning a value --- rust_experiments/src/lib.rs | 9 +++++---- rust_experiments/src/long_mode_init.asm | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/rust_experiments/src/lib.rs b/rust_experiments/src/lib.rs index 78b5901..39e937e 100644 --- a/rust_experiments/src/lib.rs +++ b/rust_experiments/src/lib.rs @@ -5,7 +5,7 @@ extern crate rlibc; extern { - fn asm_printchar(); + fn asm_printchar() -> u32; } @@ -13,11 +13,12 @@ extern { pub extern fn rust_main() { clear(); - - checkerboard(vga_buffer::Color::Red); unsafe { - asm_printchar(); + let a = asm_printchar(); + if a == 1 { + checkerboard(vga_buffer::Color::Blue); + } } loop {} diff --git a/rust_experiments/src/long_mode_init.asm b/rust_experiments/src/long_mode_init.asm index acd82cc..202bac3 100644 --- a/rust_experiments/src/long_mode_init.asm +++ b/rust_experiments/src/long_mode_init.asm @@ -50,6 +50,7 @@ setup_SSE: asm_printchar: mov rax, 0xf056 - mov [0xb8000], rax + mov [0xb8000], ax + mov rax, 0x1 ret