我正在编写一个汇编函数,它将通过端口从IDE读取。
我通过x86基指针(EBP)调用参数。 我调试了我的kernel.bin(使用gdb和qemu),并且当我调用我的recv缓冲区进行打印时,eax将返回如下值:36h01h10h
我的disk.asm被读取和写入分开。我写错了可能吗?直接将[ebp + 16]移动到esi(写入)是否合法?如果我,在读取功能上,直接将[ebp + 16]移动到edi是错误的?我使用寄存器选择该地址并使edi指向该寄存器:
在我的disk.asm中,要读取磁盘我有这个:
sub dx, 7 ;dx = 0x1f0
mov ecx, 256
mov edi, bufferrecv
rep insw
(...)
push ebx
mov ebx, [ebp+16]
mov [ebx], long word bufferrecv
pop ebx
mov esp, ebp
pop ebp
ret
写磁盘:
sub dx, 7 ;dx = 0x1f0
mov ecx, 256
mov esi, [ebp+16]
rep outsw
(...)
我以这种方式声明这些功能: Kernel.c
extern int _readd(int sector_count, int nmrsector, STRING in_msg);
extern int writed(int sector_count, int nmrsector, STRING out_msg);
STRING类型在我的types.h中声明为char *