中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 09:33
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 怎么访问BP寄存器啊? 查看 1,788 回复 3
楼 主 怎么访问BP寄存器啊? 发表于 2010-11-08 05:43 ·  中国 广东 深圳 电信
初级用户
积分 65
发帖 26
注册 2010-07-29 17:15
UID 171437
性别 男
状态 离线
// 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还能怎么访问啊?或者有别的计算地址的方法?
2 发表于 2010-11-08 10:00 ·  中国 广东 深圳 福田区 电信
高级用户
★★
积分 668
发帖 295
注册 2005-07-26 00:00
UID 41110
性别 男
来自 广东深圳
状态 离线
//获取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 ]
3 发表于 2010-11-08 15:23 ·  中国 广东 电信
初级用户
积分 65
发帖 26
注册 2010-07-29 17:15
UID 171437
性别 男
状态 离线
额,楼上的老大,我是需要C语言的,不要内嵌汇编。。。
4 发表于 2010-11-26 08:21 ·  中国 福建 厦门 电信
高级用户
★★★
积分 741
发帖 366
注册 2007-07-25 19:11
UID 94024
性别 男
状态 离线
c语言虽然可以通过声明register变量来尽可能使用寄存器做变量,但bp一般用来传递参数,所以即使用嵌入汇编方式使用bp,也要小心翼翼,否则程序很容易崩溃。
论坛跳转: