![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-03 06:59 |
共 47,812 主题排行 / 349,914 发帖 / 今日 0 篇 / 48,265 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 怎么访问BP寄存器啊? |
| 可打印版本 2,054 / 3 |
| 第1楼 yysn | 发表于 2010-11-08 05:43 |
| 初级用户 发帖 26 积分 65 | |
|
怎么访问BP寄存器啊? // struct REGPACK reg;
reg.r_ax=0x1130; reg.r_bx=reg_bx; intr(0x10,®); return MK_FP(reg.r_es,reg.r_bp); 上面的一段代码是获取16X8字符集的首地址,使用intr 我现在不想用intr这个函数,而想换成int86函数,不知道该怎么写啊? BP寄存器不用intr还能怎么访问啊?或者有别的计算地址的方法? |
|
| 第2楼 firstsail | 发表于 2010-11-08 10:00 |
| 高级用户 发帖 295 积分 668 来自 广东深圳 | |
|
//获取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楼 yysn | 发表于 2010-11-08 15:23 |
| 初级用户 发帖 26 积分 65 | |
|
额,楼上的老大,我是需要C语言的,不要内嵌汇编。。。
|
|
| 第4楼 netwinxp | 发表于 2010-11-26 08:21 |
| 高级用户 发帖 366 积分 741 | |
|
c语言虽然可以通过声明register变量来尽可能使用寄存器做变量,但bp一般用来传递参数,所以即使用嵌入汇编方式使用bp,也要小心翼翼,否则程序很容易崩溃。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |