汇编与C混合编程时,如何用BIOS的中断

kitling 2006-03-31 11:04:24
我在win2xp下,编写了一个汇编程序,如:

section .text
_start:
mov ah,9
mov al,'A'
mov bh,0
mov bl,47
mov cl,1
int 10h
ret

编译后可以执行,但是如果是由C程序调用的,如:
// b.c
#include <stdio.h>
extern int a();
int main(int argc,char *argv[])
{
a();
}

; a.asm
section .text
global _a
_a:
mov ah,9
mov al,'A'
mov bh,0
mov bl,47
mov cl,1
int 10h
ret

在命令行下编译:
gcc -c b.c
nasm -f win32 a.asm
gcc b.o a.obj -o a.exe

然后执行,会出现严重错误(弹出提示窗口)

用TD调试,发现在执行到int 10h时,会告诉访问违法,不能读 ffffffff(几个f)。。。

是因为单独用汇编时,它会变为虚拟86(实)模式?而与C相关时就是保护模式吗?

那如何设置 gdt 和 idt 呀?

还是用别的方法访问呢?

有没有简单的实例,谢谢!!!

谢谢:)
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrPotter 2006-04-06
  • 打赏
  • 举报
回复
VC使用ASM不用这么麻烦,直接用
_asm{
}
http://www.wmblog.cn/user1/2598/archives/2006/17871.html
Areslee 2006-03-31
  • 打赏
  • 举报
回复
MASM生成的是实模式代码,OS会虚拟BIOS中断
GCC生成的是PE代码,是纳入WINDOWS体系的,OS不会给他模拟,当然会出错
Areslee 2006-03-31
  • 打赏
  • 举报
回复
不是混编的原因,根本就是变了运行平台
你用TC混编试试
kitling 2006-03-31
  • 打赏
  • 举报
回复
那可不可以用保护方式下的方法访问呢?

C和汇编混编是不是用局限性?
为了使用汇编语言,必须熟悉CPU和寄存器,还需要掌握CPU的寻址方式。 为了利用NASM进行PC机的汇编语言编程,需要熟悉x86的指令集和NASM汇编程序的若干附加指令。 在使用汇编语言编写的低级代码中,所有的I/O操作(如显示字符和字符串、读入键盘按键、读写磁盘数据等)都是通过调用系统的BIOS(Basic Input Output System,基本输入输出系统)来完成的。 计算机在启动,因为系统自动装入的引导模块太小(只有一个扇区,512个字节),一般只能包含装载操作系统启动程序的代码,而启动程序本身的代码,则必须放在磁盘的其他地方。至于操作系统的大量代码,一般用C语言和汇编语言混合编写,保存为磁盘文件后,再由启动程序装载入内存。 DOS和Windows的COM可执行文件简单小巧,可用于引导代码的运行测试。 为了调试我们编写的汇编语言程序,可以使用传统小巧的实模式调试工具debug。 这次实验,我们先介绍CPU及其寄存器和寻址方法;再给出常用的x86指令和NASM汇编程序的常用附加指令;接着列出几个常用的BIOS中断及其调用方法;然后编写一个读入按键并回显字符到屏幕的小汇编程序MY-OS,并将其作为另一个引导程序;其后,把MY-OS的代码放到第二个物理扇区,再编写装载此代码块的汇编程序放到引导扇区;接着介绍COM可执行文件的生成和使用,最后简介实模式调试工具debug的基本使用方法
本书全面细致地讲述了汇编语言程序设计的各个方面。从微处理器体系结构、工作机制到指令集;从最基本的编译器链接器的使用到高级过程、结构和宏的使用;从用纯汇编编写程序到用VC++,BC++等最新编译器与汇编混合接口编程;从16位实模式下BIOS,DOS实模式文本及图形程序设计到32位保护模式的Windows程序设计;从磁盘基础知识到Intel指令编码、浮点运算等相关知识都做了深入而细致的讲解。 本书是佛罗里达国际大学等多所美国大学采用的计算机基础教材,内容广博,但又讲解得非常深入,书中结合最令人感兴趣的编程问题逐步引出汇编语言的解答,书后有编译器的安装使用以及常用的编程参考资料,随书附带的CD-ROM中配有较新的免费MASM 6.11编译器,为读者掌握汇编语言扫清一切障碍,另配以丰富和颇具特色的习题集及解答,使读者能够快速掌握这门公认为很难的语言。如果读者是汇编语言的初学者,本书则提供了最好的起点,如果读者已经熟练掌握了这门语言,重读本书,亦当有所收获。 本书对计算机体系结构及基本原理做了相当篇幅的介绍,因此本书不仅可作为高等院校计算机专业汇编语言的教材,也可以作为计算机体系结构和原理的参考资料。 本书着重讲述了如何在机器层次思考并解决程序设计的问题,具有以下特点: ·详细讲述了数制系统和数据存储的基础知识 ·所有的例子程序都在Microsoft的MASM 6.15编译器下测试通过 ·讲述了高级语言内嵌汇编代码以及汇编语言程序同实地址模式及保护模式的C/C++程序的链接 ·附带扩展的指令集手册,其中包含了指令格式和CPU标志的使用 ·讲述了中断和量和设备I/O ·随书附带的CD-ROM中包含了Microsoft MASM 6.15汇编编译器、程序编辑器、一个宏库和本书的源代码 第四版的新增内容: ·Win32程序设计,包含控制台API和图形应用程序 ·对过程、递归、堆栈参数、结构和联合进行了更多的介绍 ·布尔表达式、真值表和流程图 ·基本的字符串处理、排序和查找算法 ·实地址模式和保护模式下的位映射图形 ·IEEE浮点二进制表示法 ·虚拟机体系结构,IA-32保护模式分段和分页 ·介绍指令执行周期、内存、多任务、流水线和超标量体系结构 ·磁盘基础知识,包括磁盘的物理结构、FAT32和NTFS文件的结构 .PDG格式

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧