一、创建这个库的原因
目前为止还没有微软官方支持的汇编语言编程库。当程序员在1980年代开始在x86处理器上编写汇编语言时,MS-DOS是最常用的操作系统。当时的16位的程序能够调用MS-DOS方程(被称为INT 21h服务)来进行简单的输入和输入。但是在当时,如果我们想要在控制台输出一个整数,那么我们需要写一个相当长的程序,这个程序需要将我们的整数转化为ASCⅡ字符,我们把这个程序称为WriteInt,程序的实现逻辑如下:
初始化:
let n equal the binary value
let buffer be an array of char[size]
算法:
i = size -1 ; last position of buffer
repeat
r = n mod 10 ; remainder
n = n / 10 ; integer division
digit = r OR 30h ; conver r to ASCII digit
buffer[i--] = digit ; store in buffer
until n = 0
if n is negative
buffer[i] = "-" ; insert a negative sign
while i > 0
print buffer[i]
i++
一些专业的程序员都喜欢建立自己的库。在windows下的32位模式中,输入输出库必须直接调用操作系统。这对于初学者有些困难,因此,Irvine32库被设计用来提供简单的输入输出接口供初学者调用。
下表包含了Irvine32库文件的函数:
/待补充191
二、总览
控制台窗口(console window)是一个由MS-Windows创造的只显示文本的命令行提示符(command prompt)。打开控制台窗口的最简单的方式就是cmd。
一个文件句柄(file handle)是一个Windows操作系统使用的用来指示打开的文件的一个32位整数。当我们的程序调用一个Windows服务来打开或创建一个文件时,操作系统就会创建一个新的文件句柄并为提供给我们的程序这个句柄。每次我们调用操作系统服务来读取或写入这个文件,我们都必须传递这个文件句柄来作为一个参数。
Note: If your program calls procedures in the Irvine32 library, you must always push 32-bit values onto the runtime stack; if you do not, the Win32 Console functions called by the library will not work correctly.
三、对于特定函数的说明
DumpMem
DumpMem函数向控制台窗口写入一些十六进制整数。我们需要利用ESI向这个函数传入起始地址,利用ECX传递元素数量,利用EBX传递元素长度(1代表byte,2代表word,4代表双字)。下面的示例调用展示了一个包含11个元素的双字数组:
.data
array DWORD 1,2,3,4,5,6,7,8,9,0Ah,0Bh
.code
main PROC
mov esi,OFFSET array ;开始时的偏移地址
mov ecx,LENGTHOF array ;元素数量
mov ebx,TYPE array ;单个元素的长度
call DumpMem
程序会输出如下的内容: