Board logo

标题: 怎么访问BP寄存器啊? [打印本页]

作者: yysn     时间: 2010-11-8 05:43    标题: 怎么访问BP寄存器啊?

//        struct REGPACK reg;

        reg.r_ax=0x1130;
        reg.r_bx=reg_bx;
        intr(0x10,&reg);

        return MK_FP(reg.r_es,reg.r_bp);


上面的一段代码是获取16X8字符集的首地址,使用intr
我现在不想用intr这个函数,而想换成int86函数,不知道该怎么写啊?
BP寄存器不用intr还能怎么访问啊?或者有别的计算地址的方法?
作者: firstsail     时间: 2010-11-8 10:00
//获取8X8字符集的首地址
unsigned char* GetCharacterPoint()
{

        unsigned short wSeg = 0;
        unsigned short wOff = 0;

        asm push es
        asm push bp

        asm mov ax, 1130H
        asm mov bh, 03H //获问8*8字库首地址
        asm int 10h

        asm mov ax, bp
        asm pop bp //非常重要,否则程序会崩溃
        asm mov wOff, ax

        asm mov ax, es
        asm mov wSeg, ax
        asm pop es

        return ((unsigned char *)(unsigned long)MK_FP(wSeg, wOff));
}

[ Last edited by firstsail on 2010-11-8 at 10:02 ]
作者: yysn     时间: 2010-11-8 15:23
额,楼上的老大,我是需要C语言的,不要内嵌汇编。。。
作者: netwinxp     时间: 2010-11-26 08:21
c语言虽然可以通过声明register变量来尽可能使用寄存器做变量,但bp一般用来传递参数,所以即使用嵌入汇编方式使用bp,也要小心翼翼,否则程序很容易崩溃。