程序集检索缓冲区到c函数参数

时间:2016-02-22 18:54:01

标签: c assembly x86 32-bit calling-convention

我正在编写一个汇编函数,它将通过端口从IDE读取。

我通过x86基指针(EBP)调用参数。 我调试了我的kernel.bin(使用gdb和qemu),并且当我调用我的recv缓冲区进行打印时,eax将返回如下值:36h01h10h

IBM Char Table

我的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 *

0 个答案:

没有答案