在很长一段时间里面因为有编译器的帮助,完全没有手工进行汇编语言和机器语言转化的需求。不过前面碰到了RDRAND 这样的指令,一方面说明CPU指令还在增长,另一方面也发觉还有这样的要求,于是进行一些探究。
从资料上看,目前还活着的汇编工具有 NASM。先查阅一下支持的指令【参考1】,确定支持了 RDR[......]
月度归档: 2017年10月
VC Console 读取 WMI 的例子
来自 https://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx
特别注意取得的 WMI 的 String 是 Unicode 的,输出时需要使用 %ls
#include "stdafx.h"
#define _[......]
Step to UEFI (127)RDRAND 再研究
前面提到过 RDRAND指令,最近再拿出来看一下,思考了更多问题。
前情提要:
具体的RDRAND指令是通过内嵌汇编实现的,在ASM中直接定义如下
; rdrand ax ; generate a 16 bit RN into ax,[......]
Step to UEFI (126)ReturnAddress 研究
最近查看代码发现 Base.h 中新添加了一个ReturnAddress的函数(称作宏更恰当)。对应代码如下:
#if defined(_MSC_EXTENSIONS) && !defined (__INTEL_COMPILER) && !defined (MD[......]
Step to UEFI (125)CPUBreakPoint 研究
最近在研究 Intel ITP,这是可以进行源码级别调试的硬件工具。刚使用就遇到一个有意思的问题:如何让代码在需要的时候停下来。最直接的想法就是编写死循环,但是很快发现因为编译器的优化,当它发现你编写的代码是死循环,那么它会自动优化掉后面的它认为跑不到的代码。因此需要另辟蹊径找到更标准的方法。
找[......]
Delphi 版的 KeyPressed 函数
有时候,我们需要在 console 中检查是否有按键按下,对于c语言来说,有 kbhit 和 keypressed, 但是Delphi库中没有对应的现成函数。
经过搜索,最终找到了一段代码【参考1】,根据这段代码,编写下面的测试程序:
program Project5; {$APP[......]
Step to UEFI (124) Ready_To_Boot Event
很早之前的代码,如果想完成在引导之前的一些工作,需要在Log中查找确定跳入引导代码之前的代码。直观,但是没有规范,同一个项目很容易出现好多代码都塞到同一处的情况。到了 UEFI ,规范中给出了一个规范的做法:使用 ReadyToBoot Event。对于这个,在《UEFI 原理与编程》第6章 事件有[......]