摘要:
在主程序运行的过程中,中断发生的频率有多大呢?实际上,大部分的外围设备,都会频繁地发出中断请求。其原因就是为了实时处理从外围设备输入的数据。虽然不利用中断也可以从外围设备输入数据。但那种情况下,主程序就必须要持续不断地检测外围设备是否有数据输入。由于外围设备有很多个,因此就有必要按照顺序来调查。按照 阅读全文
posted @ 2023-02-08 10:04
濒临物种仙女
阅读(31)
评论(0)
推荐(0)
摘要:
IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现处理无法顺畅进行的情况。从中断处理开始到请求中断的程序(中断处理程序)运行结束之前,被中断的程序(主程序)的处理是停止的。这种情况就类似于在处 阅读全文
posted @ 2023-02-08 10:03
濒临物种仙女
阅读(16)
评论(0)
推荐(0)
摘要:
在AT兼容机中,蜂鸣器的默认端口号是61H(末尾的H,表示的是十六进制数(Hexadecimal)的意思)。用IN指令通过该端口号输入数据,并将数据的低2位设定为ON,然后再通过该端口号用OUT指令输出数据,这时蜂鸣器就会响起来。采用同样的操作方法,将数据的低2位设定为OFF并输出后,蜂鸣器就停止了 阅读全文
posted @ 2023-02-08 09:59
濒临物种仙女
阅读(67)
评论(0)
推荐(0)
摘要:
上图是IN指令和OUT指令的语法 上图是数据传递 阅读全文
posted @ 2023-02-08 09:54
濒临物种仙女
阅读(63)
评论(0)
推荐(0)
摘要:
在用C语言等高级编程语言开发的Windows应用中,大家很少能接触到直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。不过,Windows提供了通过应用来间接控制硬件的方法。 利用操作系统提供的系统调 用功能就可以实现对硬件的控制。在Windows中,系统调用称为API(图11-1 阅读全文
posted @ 2023-02-08 09:50
濒临物种仙女
阅读(23)
评论(0)
推荐(0)
摘要:
代码清单10-12中用到了三种跳转指令,分别是比较结果小时跳转的jle (jump on less or equal)、大时跳转的jge (jump on greater orequal)、不管结果怎样都无条件跳转的jmp。在这些跳转指令之前还有用来比较的cmp指令,比较结果被保存在了标志寄存器中。 阅读全文
posted @ 2023-02-08 09:42
濒临物种仙女
阅读(17)
评论(0)
推荐(0)
摘要:
接下来,让我们继续解析汇编语言的源代码,看一下for循环及if条件分支等C语言程序的流程控制是如何实现的。代码清单10-8是将局部变量i作为循环计数器 连续进行10次循环的C语言源代码。在for语句中,调用了不做任何处理的MySub函数。这里我们把代码清单10-8转换成汇编语言,然后仅把相当于for 阅读全文
posted @ 2023-02-08 09:40
濒临物种仙女
阅读(23)
评论(0)
推荐(0)
摘要:
函数内部利用的栈,在函数处理完毕后会恢复到初始状态,因此局部变量的值也就被销毁了,而寄存器也可能会被用于其他目的。因此,局部变量只是在函数处理运行期间临时存储在寄存器和栈上。在代码清单10-6中定义了10个局部变量。这是为了表示存储局部变量的不仅仅是栈,还有寄存器。为确保cl~c10所需的领域,寄存 阅读全文
posted @ 2023-02-08 09:36
濒临物种仙女
阅读(22)
评论(0)
推荐(0)
摘要:
在C语言中,在函数外部定义的变量称为全局变量,在函数内部定义的变量称为局部变量。全局变量可以参阅源代码的任意部分,而局部变量只能在定义该变量的函数内进行参阅。 阅读全文
posted @ 2023-02-08 09:34
濒临物种仙女
阅读(19)
评论(0)
推荐(0)
摘要:
接下来,让我们透过执行AddNum函数的源代码部分,来看一下参数的接收、返回值的返回等机制(代码清单10-5)。 ebp寄存器的值在(1)中入栈,在(5)中出栈。这主要是为了把函数中用到的ebp寄存器的内容,恢复到函数调用前的状态。在进入函数处理之前,无法确定ebp寄存器用到了什么地方,但由于函数内 阅读全文
posted @ 2023-02-08 09:30
濒临物种仙女
阅读(22)
评论(0)
推荐(0)