繁体   English   中英

程序集INT 0x13:尝试从磁盘读取时未收到错误

[英]Assembly INT 0x13: Not getting an error when trying to read from disk

每当我在QEMU中运行此程序时,似乎都不会出现错误,但是该消息未打印在屏幕上,因此我不确定我看不到真正发生的事情。 这是我的代码:

[org 0x7c00]
mov bp, 0x8000
mov sp, bp

mov si, name
call print_string
mov si, version
call print_string
call rd_dsk
mov si, testmsg
call print_string
jmp $

;Print
print_char:
  mov ah, 0x0e
  int 0x10
  ret
print_string:
  screen:
    lodsb
    cmp al, 0
    je screen_end
    mov ah, 0x0e
    int 0x10
    jmp screen
  screen_end:
  ret
print_hex:
  mov si, hex_temp
  mov bx, dx
  shr bx, 12
  mov bx, [bx+hex_alph]
  mov [hex_temp+2], bl
  mov bx, dx
  shr bx, 8
  and bx, 0x000f
  mov bx, [bx+hex_alph]
  mov [hex_temp+3], bl
  mov bx, dx
  shr bx, 4
  and bx, 0x000f
  mov bx, [bx+hex_alph]
  mov [hex_temp+4], bl
  mov bx, dx
  and bx, 0x000f
  mov bx, [bx+hex_alph]
  mov [hex_temp+5], bl
  call print_string
  ret

;Read
rd_dsk:
  mov ah, 0x02
  mov al, 0x01
  mov ch, 0x00
  mov dh, 0x00
  mov cl, 0x02
  mov bx, 0x00
  mov es, bx
  mov bx, 0x7c00 + 512
  int 0x13
  jc rd_dsk_error
   ret

; Error
rd_dsk_error:
  mov si, rd_dsk_error_msg
  call print_string
  jmp $

;Misc Data
name:
  db 'PurityOS ',0
version:
  db 'v0.0.1.2 ',0
hex_temp:
  db '0x????',0
hex_alph:
  db '0123456789ABCDEF'

; Error Messages
rd_dsk_error_msg:
  db 'Error reading the disk.',0

times 510-($-$$) db 0
dw 0xaa55

;Data beyond BootSector
testmsg:
  db 'Reading Second Sector',0

我期望得到以下输出:

PurityOS v0.0.1.2 Reading Second Sector

但是,我只得到这个:

PurityOS v0.0.1.2

另外,如果我将“ call rd_dsk”放在顶部:

[org 0x7c00]
mov bp, 0x8000
mov sp, bp

call rd_dsk
mov si, name
call print_string
mov si, version
call print_string
mov si, testmsg
call print_string
jmp $

我没有任何输出,我只得到闪烁的光标,就好像我只有“ jmp $”一样

我使用NASM组装.asm文件,并使用QEMU运行它。 “ qemu -fda ...”不起作用。 我得到“程序'qemu'可以在以下软件包中找到”,安装后这些软件包都无济于事。 我只运行“ qemu-system-x86_64 ./Asm/bootsector.bin”以打开QEMU。

先感谢您。

您的堆栈指针最初位于0x0000:0x8000。

当您执行“调用”或“ int”指令时,返回地址被压入堆栈(位于存储器范围0x7F00-0x8000中)。

当您覆盖此内存时,系统将崩溃。

解:

在此行中将0x8000更改为0x7BFC:

mov bp, 0x8000
mov sp, bp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM