在Windows中使用来自控制台I / O的用户输入的中断?

时间:2015-01-15 08:35:53

标签: windows assembly

控制台窗口中用户输入和输出的中断是什么?

您好我正在尝试学习汇编语言,我知道在MS-DOS操作系统中,.COM程序是受支持的,并且被加载到100h的内存中,不是吗?第一个1k字节是IVT或中断向量表,它是一个中断列表,不是吗?所以在MS-DOS中如果我们想要询问用户的输入,我们首先将01移动到AH注册为MOV ah, 01并调用中断INT 21h,我不是知道这是否会在DOS上工作,我从未尝试过DOS虚拟机或类似的应用程序,我不想要DOS程序我只想要一个控制台窗口,要求用户输入...

我刚刚进入汇编编程,在Windows上没有找到完整的教程,或者不只是一个显示使用中断的东西,到处都有MASM与windows.inc库和C standard libs一起使用,我不想浪费我的时间来学习它们,因为在学习汇编编程之后我想学习编写启动程序,它不会粘在一个操作系统上,而我想使用Interrupts的原因仅仅是为了学习目的,这意味着只是为了学习汇编语言,目前我知道的指令非常少MOV ADD SUB INC INT& DEC并且对寄存器一无所知或更不了解,因此,凭借这些有限的能力,我无法编写启动程序,因此我试图在Windows上学习或练习汇编但是有中断,因此不想使用那些我的应用程序中的预定义库,并且只想使用来自IVT的中断并切换到BIOS中断,用于引导程序。

我在一个论坛上听说微软将Windows IVT从公众手中隐藏起来,因为他们希望自己的API变得流行,这是真的吗?这意味着我无法使用中断来处理Windows中的I / O?因为没有这样的纪录片,如果没有和它一起发布NASM的例子,请参考任何在线/离线指南,我的上一个请求请告诉我如何转换MASM写的NASM源代码,我的意思是它们之间有什么区别,简而言之,我有两个请求和一个问题如下:

1。 Q1:Windows中控制台I / O的中断是什么?

2。 R1:请分享关于Assembly for Windows的任何好教程特别是关于使用中断,就像使用TutorialsPoint但它用于Linux而我想用于Windows。

最后一个......

3。 R2:MASM的输入文件源代码与NASM的不同?我的意思是我能找到多少和哪里可以为他们编写源代码,因为很多教程都说许多MASM程序不会在NASM中运行......

先谢谢!!

1 个答案:

答案 0 :(得分:2)

  

前1k字节是IVT或中断向量表......

现代CPU有两个(在64位CPU甚至三个CPU的情况下)操作模式:"实模式"和#34;保护模式"。

当CPU启动并在MS-DOS中时,CPU运行在"实模式"。当Windows运行时,CPU运行在"保护模式"。在这种模式下,中断系统的工作方式完全不同于真实模式"。

无法直接访问IVT,无法从其他任务访问属于任务的内存。

  

Windows中控制台I / O的中断是什么?

Windows NT,32位,使用中断1Eh。但是,其他Windows版本(例如Windows 9x)使用了另一种进入操作系统的方法。

据我所知,64位版本的Windows也不使用中断。

没有Windows程序(旧的16位Windows程序除外)直接使用中断。

  

将Windows IVT从公众手中隐藏起来,因为他们希望自己的API变得流行,这是真的吗?

它们隐藏了中断号码,因为它们仅在某些Windows版本中可用。

编写适用于当前所有Windows版本的程序的唯一可能性是使用Windows API。

  

我不想浪费时间学习它们

在这种情况下,不要浪费时间为Windows编写汇编程序!如果您对编译器开发感兴趣,那么这样做才有意义。

使用一些虚拟机工具(Bochs,VMware,...)并开始编写"启动程序"现在或使用MS-DOS模拟器并为MS-DOS编写汇编程序。

Windows的汇编程序的唯一用途是32位汇编程序比16位汇编程序(MS-DOS和#34;启动程序"所需)更容易学习。为Windows编写汇编程序可能有助于学习......