【发布时间】:2013-11-24 09:17:16
【问题描述】:
我用
组装了以下代码 nasm -f bin 选项并放入软盘镜像,然后用virtualbox运行
我的目标是call print_word
但是我怎么能在这里call print_word?
要了解如何调用额外扇区中的函数,
我将print_word 放入有内涵的第二扇区。
提前致谢。
main.asm:
org 0x7c00
start:
mov ax, 0x0206
mov cx, 0x0002
mov dx, 0x0000
mov bx, 0x7e00
push bx
pop es
mov bx, 0
.try_again:
int 13h
jc .try_again
mov ax, 0xabcd
push ax
jmp 0x7e00
jmp $
times 510 - ($-$$) db 0
dw 0xaa55
more:
%include "./common/print_word.asm"
print_word.asm:
;print_word(word)
print_word:
push bp
mov bp, sp
push word [bp+4]
call print_word_1
push word [bp+4]
call print_word_2
push word [bp+4]
call print_word_3
push word [bp+4]
call print_word_4
mov sp, bp
pop bp
ret
print_word_1:
push bp
mov bp, sp
mov ah, 0x0e
mov byte al, [bp+4]
shr al, 4
cmp al, 0x0a
jl .num
sub al, 0x0a
jmp .char
.num:
add al, '0'
jmp .put
.char:
add al, 'A'
jmp .put
.put:
int 10h
mov sp, bp
pop bp
ret
print_word_2:
push bp
mov bp, sp
mov ah, 0x0e
mov byte al, [bp+4]
shl al, 4
shr al, 4
cmp al, 0x0a
jl .num
sub al, 0x0a
jmp .char
.num:
add al, '0'
jmp .put
.char:
add al, 'A'
jmp .put
.put:
int 10h
mov sp, bp
pop bp
ret
print_word_3:
push bp
mov bp, sp
mov ah, 0x0e
mov byte al, [bp+5]
shr al, 4
cmp al, 0x0a
jl .num
sub al, 0x0a
jmp .char
.num:
add al, '0'
jmp .put
.char:
add al, 'A'
jmp .put
.put:
int 10h
mov sp, bp
pop bp
ret
print_word_4:
push bp
mov bp, sp
mov ah, 0x0e
mov byte al, [bp+5]
shl al, 4
shr al, 4
cmp al, 0x0a
jl .num
sub al, 0x0a
jmp .char
.num:
add al, '0'
jmp .put
.char:
add al, 'A'
jmp .put
.put:
int 10h
mov sp, bp
pop bp
ret
【问题讨论】:
标签: assembly x86 nasm bootloader bios