汇编 Irvine32链接库中一些过程函数的使用说明

 

 

  1 CloseFile:CloseFile过程关闭一个以前打开的文件。文件是以文件句柄handle标识的,文件句柄通过EAX传递。如果文件被成功关闭,EAX中的返回值为非零值。例:
  2 
  3 Mov eax,fileHandle
  4 
  5 Call CloseFile
  6 
  7 
  8 
  9 Clrscr过程用于清除控制台窗口的内容,它通常在程序的开始和结束时使用:
 10 
 11 Call waitMsg  ;“Press any key…”作用是屏幕擦除前暂停一下,便于看清已有的信息call CLrscr
 12 
 13 
 14 
 15 crlf过程把光标定位到控制台窗口下一行的开始,回车换行
 16 
 17 Call crlf
 18 
 19 
 20 
 21 createOutputFile 过程创建一个磁盘文件并以输出模式打开。
 22 
 23 使用时通过EDX传递要创建的文件名的偏移地址。
 24 
 25 .data
 26 
 27 Filename byte "newfile.txt",0
 28 
 29 Handle dword ?
 30 
 31 .code
 32 
 33 Mov edx,offset filename
 34 
 35 Call CreatOutputFile
 36 
 37 Cmp eax,INVALID_HANGDLE_VALUE  ;如果创建失败,EAX返回值
 38 
 39 Je file_error             ;显示错误信息
 40 
 41 Mov handle,eax            ;保存文件句柄
 42 
 43 
 44 
 45 Delay过程暂停程序指定的毫秒数。
 46 
 47 Mov eax,1000      ;1s
 48 
 49 Call delay
 50 
 51 
 52 
 53 DumpMem过程功能时以十六进制数格式在控制台窗口显示一块内存的内容。入口参数:ESI为内存的开始地址,ECX为元素数目,EBX为元素尺寸。
 54 
 55 .data
 56 
 57 Array dword 1,2,3,4,5,6,7,8,9,0ah,0bh
 58 
 59 .code
 60 
 61 Main proc
 62 
 63 Mov esi,offset array
 64 
 65 Mov ecx,lengthof array
 66 
 67 Mov ebx,type array
 68 
 69 Call DumpMem
 70 
 71 
 72 
 73 DumpRegs过程以十六进制数格式显示通用寄存器的内容,并同时显示进位、符号、零和溢出标志的值。
 74 
 75 之前用过,不再重复
 76 
 77 
 78 
 79 GetCommandTail过程把程序命令行参数复制到一个以空字符结尾的字符串中。零字符串。例如程序Encrypt读取输入文件file1.txt并产生一个输出文件file2.txt:
 80 
 81 Encrypt file1.txt,file2.txt
 82 
 83 
 84 
 85 .data
 86 
 87 cmdTail byte 129 dup(0)
 88 
 89 .code
 90 
 91 Mov edx,offset cmdTail
 92 
 93 Call GetCommmandtail
 94 
 95 
 96 
 97 GetMaxXY过程返回控制台窗口缓冲区的大小。
 98 
 99 .data
100 
101 Rows byte ?
102 
103 Cols byte ?
104 
105 .code
106 
107 Call GetMaxXY
108 
109 Mov rows,dh
110 
111 Mov cols,dl
112 
113 
114 
115 GetMseconds:返回从午夜开始计算的逝去的毫秒数,返回值在EAX中,这个过程可用来测量两个事件之间的时间间隔,该过程不需要输入参数。
116 
117 .data 
118 
119 startTime DWORD ? 
120 
121 .code 
122 
123 call GetMseconds 
124 
125 mov startTime,eax 
126 
127 L1: 
128 
129 ; (loop body) 
130 
131 loop L1 
132 
133 call GetMseconds 
134 
135 sub eax,startTime ; EAX = loop time, in milliseconds
136 
137 
138 
139 GetTextColor(仅Ivine32):
140 
141 功能:返回当前控制台窗口的前景色和背景色
142 
143 入口参数:无
144 
145 出口参数:AL,高4位背景色,低4位前景色
146 
147 .data 
148 
149 color BYTE ?
150 
151 .code 
152 
153 call GetTextColor 
154 
155 mov color,AL 
156 
157 
158 
159 Gotoxy:
160 
161 功能:把光标定位在控制台窗口中指定的行列位置上。
162 
163 入口参数:dh行,dl列
164 
165 出口参数:无
166 
167 说明:默认情况下控制台窗口X坐标的范围0~79,Y坐标范围0~24.
168 
169 mov dh,10 ; row 10 
170 
171 mov dl,20 ; column 20
172 
173 call Gotoxy ; locate cursor 
174 
175 
176 
177 IsDigit
178 
179 功能:确定AL中的字符是否是有效的十进制数字0~9180 
181 入口参数:AL=ASCII码数值
182 
183 出口参数:是,ZF=1,否ZF=0
184 
185 说明:
186 
187 mov AL,somechar 
188 
189 call IsDigit 
190 
191 
192 
193 MsgBox过程显示一个图形界面的弹出消息框,可以设置标题栏要显示的文字。调用时通过EDX传递要显示的字符串的偏移地址,字符串将显示在消息框的中央。还可以通过EBX传递要显示在标题栏中的字符串的偏移地址。EBX清零,标题栏为空。
194 
195 .data
196 
197 Caption db "Dialog Tile",0
198 
199 HelloMsg byte "This is a pop-up message box.",0dh,0ah
200 
201 ​     byte "Click OK to continue…",0
202 
203 .code
204 
205 Mov ebx,offset caption
206 
207 Mov edx,offset HellMsg
208 
209 Call MsgBox
210 
211 
212 
213 
214 
215 MsBoxAsk过程显示一个带一个YES按钮和No按钮图形界面的弹出消息框。调用时入口参数和MsgBox过程一样,调用时通过EDX传递要显示的字符串的偏移地址,字符串将显示在消息框的中央。EBX传递要显示在标题栏中的字符串的偏移地址。返回参数EAX=6,表示用于选择YES,EAX=7表示用户选择NO
216 
217 .data 
218 
219 caption BYTE "Survey Completed",0 
220 
221 question BYTE "Thank you for completing the survey." 
222 
223 BYTE 0dh,0ah
224 
225 BYTE "Would you like to receive the results?",0
226 
227 .code 
228 
229 mov ebx,OFFSET caption
230 
231 mov edx,OFFSET questio
232 
233 call MsgBoxAsk ;(check return value in EAX) 
234 
235 
236 
237 
238 
239 OpenInputFile(仅Irvine32)
240 
241 功能:打开一个已存在的磁盘文件进行输入
242 
243 入口参数:EDX为要打开的文件名的偏移地址
244 
245 出口参数:创建成功,EAX=文件柄,创建失败,EAX=INVALID_HANDLE_VALUE预定义的常量。
246 
247 说明:
248 
249 .data 
250 
251 filename BYTE "myfile.txt",0 
252 
253 .code 
254 
255 mov edx,OFFSET filename 
256 
257 call OpenInputFile 
258 
259 if EAX = INVALID_FILE_HANDLE 
260 
261 the file was not opened successfully 
262 
263 else EAX = handle for the open file endif 
264 
265 
266 
267 
268 
269 ParseDecimal32
270 
271 功能:把无符号整数字符串转换为一个32位的二进制数。
272 
273 入口参数:EDX字符串的偏移地址,ECX=字符串的长度
274 
275 出口参数:EAX转换后的二进制值
276 
277 说明:字符串中的非数字字符前面的所有数字都讲被转换,开头的空格将被忽略。
278 
279 .data 
280 
281 buffer BYTE "8193" 
282 
283 bufSize = ($ - buffer) 
284 
285 .code 
286 
287 mov edx,OFFSET buffer 
288 
289 mov ecx,bufSize 
290 
291 call ParseDecimal32 ; returns EAX 
292 
293 
294 
295 
296 
297 ParseInteger32
298 
299 功能:把有符号整数字符串转换为一个32位的二进制数。
300 
301 入口参数:EDX字符串的偏移地址,ECX=字符串的长度
302 
303 出口参数:EAX转换后的二进制值
304 
305 说明:字符串中的非数字字符前面的所有数字都讲被转换,开头的空格将被忽略。
306 
307 .data 
308 
309 buffer BYTE "-8193" 
310 
311 bufSize = ($ - buffer) 
312 
313 .code 
314 
315 mov edx,OFFSET buffer 
316 
317 mov ecx,bufSize 
318 
319 call ParseInteger32 ; returns EAX 
320 
321 
322 
323 
324 
325 Random32
326 
327 功能:生成32位随机整数,并在EAX中返回
328 
329 入口参数:无
330 
331 出口参数:EAX=32位随机整数
332 
333 说明:伪随机,无种子输入
334 
335 .data 
336 
337 randVal DWORD ? 
338 
339 .code 
340 
341 call Random32 
342 
343 mov randVal,eax 
344 
345 
346 
347 Randomize
348 
349 功能:初始化Random32和RandomRange过程使用的种子值,该种子值使用的是当前时间,精确到1/100s
350 
351 入口参数:无
352 
353 出口参数:无
354 
355 说明:每次生成的随机数序列都不同并且唯一
356 
357 call Randomize 
358 
359 mov ecx,10 
360 
361 L1: 
362 
363 call Random32 
364 
365 ; use or display random value in EAX here... 
366 
367 loop L1 
368 
369 
370 
371 
372 
373 RandomRange
374 
375 功能:生成一个在范围0~(n-1)之间的随机整数
376 
377 入口参数:eax=n
378 
379 出口参数:eax=随机数
380 
381 说明:
382 
383 .data 
384 
385 randVal DWORD ? 
386 
387 .code 
388 
389 mov eax,5000 
390 
391 call RandomRange 
392 
393 mov randVal,eax 
394 
395 
396 
397 
398 
399 Readchar
400 
401 功能:从标准输入读取一个字符
402 
403 入口参数:无
404 
405 出口参数:AL=输入的字符
406 
407 说明:不带回显
408 
409 .data 
410 
411 char BYTE ? 
412 
413 .code 
414 
415 call ReadChar 
416 
417 mov char,al 
418 
419 
420 
421 
422 
423 ReaDec
424 
425 功能:读取键盘输入的无符号32位十进制整数并在EAX中返回。
426 
427 入口参数:无
428 
429 出口参数:EAX=32位十进制整数
430 
431 说明:忽略输入字符串开头的空格,从字符串开始处将所有有效的数字字符进行转换,遇到非数字字符则停止。
432 
433 如果输入的整数数字串为空,则EAX=0,CF=1
434 
435 如果输入的整数数字串只包含空格,,则EAX=0,CF=1
436 
437 如果输入的整数大于232-1,则EAX=0,CF=1
438 
439 除上述情况之外,EAX=转换后的整数CF=0440 
441 .data
442 
443 intVal DWORD ?
444 
445 .code call ReadDec 
446 
447 mov intVal,eax 
448 
449 
450 
451 ReadFromFile(仅Irvine32)
452 
453 功能:把输入文件的内容读到一个缓冲区内
454 
455 入口参数:EAX=文件柄,EDX缓存区偏移地址,ECX=最多要读取的字节数。
456 
457 出口参数:CF=0,EAX返回从文件中实际读取的字节数,CF=1,EAX返回系统的出错代码。
458 
459 说明:调用过程WriteWindowsMsg获取出错代码的文本描述
460 
461 .data 
462 
463 BUFFER_SIZE = 5000 
464 
465 buffer BYTE BUFFER_SIZE DUP(?) 
466 
467 bytesRead DWORD ? 
468 
469 .code 
470 
471 mov edx,OFFSET buffer ; points to buffer 
472 
473 mov ecx,BUFFER_SIZE ; max bytes to read 
474 
475 call ReadFromFile ; read the file 
476 
477 
478 
479 
480 
481 
482 
483 ReadHex
484 
485 功能:从标准输入读取一个32为十六进制整数
486 
487 入口参数:无
488 
489 出口参数:EAX=一个32为十六进制整数
490 
491 说明:对无效数字不进行错误检查,不区分大小写,最多允许输入8位数字,忽略数字串开头的空格
492 
493 .data 
494 
495 hexVal DWORD ?
496 
497 .code 
498 
499 call ReadHex 
500 
501 mov hexVal,eax 
502 
503 
504 
505 
506 
507 
508 
509 ReadInt
510 
511 功能:从标准输入读取一个32位有符号整数
512 
513 入口参数:无
514 
515 出口参数:EAX=一个32位有符号整数
516 
517 说明:可以输入+号和-号,其余部分只能是数字字符,如果溢出则返回错误信息。从字符串开始处将有效的数字字符转换,遇到非数字字符则停止
518 
519 .data 
520 
521 intVal SDWORD ? 
522 
523 .code 
524 
525 call ReadInt 
526 
527 mov intVal,eax
528 
529 
530 
531 
532 
533 ReadKey
534 
535 功能:进行键盘检查,单不等待键盘输入
536 
537 入口参数:无
538 
539 出口参数:zf=1,未发现按键,ZF=0,发现按键;AL=按键ASCII或零;AH=按键扫描码;DX=虚拟键码,EBX=键盘标志位。
540 
541 说明:
542 
543 .data
544 
545 Char byte ?
546 
547 .code
548 
549 L1:
550 
551 Mov eax,10
552 
553 Call delay
554 
555 Call readkey
556 
557 Jz L1
558 
559 Mov char,al
560 
561 
562 
563 IsDigit
564 
565 功能:
566 
567 入口参数:
568 
569 出口参数:
570 
571 说明:
572 
573 
574 
575 ReadString
576 
577 功能:从标准输入读取一个字符串
578 
579 入口参数:无
580 
581 出口参数:EAX=读入的字节数,EDX保存字符串的缓存区偏移地址,ECX=用户最多可输入的字符数+1
582 
583 说明:回车键结束
584 
585 .data 
586 
587 buffer BYTE 21 DUP(0) ; input buffer byte
588 
589 Count DWORD ? ; holds counter 
590 
591 .code 
592 
593 mov edx,OFFSET buffer ; point to the buffer 
594 
595 mov ecx,SIZEOF buffer ; specify max characters 
596 
597 call ReadString ; input the string 
598 
599 mov byteCount,eax ; number of characters 
600 
601 
602 
603 SetTextColor过程设置文本输出的前景色和背景色。入口参数EAX存放要设置的色彩属性。如下为色彩属性的常量定义:
604 
605 
606 
607 例:蓝底黄字 yellow+(blue*16)  ; 前景色+背景色*16
608 
609 Mov eax,white+(blue*16) 
610 
611 Call SetTextColor
612 
613 
614 
615 
616 
617 StrLength
618 
619 功能:返回以NULL结尾的字符串的长度
620 
621 入口参数:EDX字符串的偏移地址
622 
623 出口参数:EAX=字符串的长度
624 
625 说明:
626 
627 .data 
628 
629 buffer BYTE "abcde",0 
630 
631 bufLength DWORD ? 
632 
633 .code 
634 
635 mov edx,OFFSET buffer ; point to string 
636 
637 call StrLength ; EAX = 5 
638 
639 mov bufLength,eax ; save length 
640 
641 
642 
643 
644 
645 WaitMsg
646 
647 功能:显示“Please any key to continue…”,并等待用户按下一个键
648 
649 入口参数:无
650 
651 出口参数:无
652 
653 说明:在显示的数据滚动屏幕消失之前调用本过程,可以暂停以下
654 
655 Call WaitMsg
656 
657 
658 
659 WriteBin
660 
661 功能:在屏幕上以ASCII码二进制数格式显示32位整数
662 
663 入口参数:EAX=32位整数
664 
665 出口参数:无
666 
667 说明:
668 
669 mov eax,12346AF9h 
670 
671 call WriteBin 
672 
673 0001 0010 0011 0100 0110 1010 1111 1001 
674 
675 
676 
677 WriteBinB
678 
679 功能:在屏幕上以ASCII码二进制数格式显示32位整数,可以指定以字节,字或双字方式显示
680 
681 入口参数:EAX=要显示的整数,EBX=显示方式
682 
683 出口参数:无
684 
685 说明:
686 
687 mov eax,00001234h 
688 
689 mov ebx,TYPE WORD ; 2 bytes 
690 
691 call WriteBinB ; displays 0001 0010 0011 0100 
692 
693 
694 
695 
696 
697 WriteChar
698 
699 功能:在控制台窗口显示一个字符
700 
701 入口参数:AL=要显示的字符
702 
703 出口参数:无
704 
705 说明:
706 
707 Mov al,'A'
708 
709 Call WriteChar
710 
711 
712 
713 WriteDec
714 
715 功能:以十进制数格式在控制台窗口中显示一个32位无符号整数,输入的数字开头不填充0
716 
717 入口参数:EAX=一个32位无符号整数
718 
719 出口参数:无
720 
721 说明:
722 
723 Mov eax,295
724 
725 Call wrtieDEC
726 
727 
728 
729 WriteHex
730 
731 功能:以十六进制数格式在标准输出上显示一个32位无符号整数,是以8个十六进制数表示的。
732 
733 入口参数:EAX=一个32位无符号整数
734 
735 出口参数:无
736 
737 说明:
738 
739 Mov eax,295
740 
741 Call wrtieHex
742 
743 
744 
745 
746 
747 WriteHexB
748 
749 功能:以十六进制数格式在控制台上显示一个32位无符号整数。如果需要的话,可以在十六进制数前填充0,可以指定以字节,字或双字方式显示。
750 
751 入口参数:EAX=要显示的整数,EBX=显示方式
752 
753 出口参数:无
754 
755 说明:
756 
757 mov eax,7FFFh 
758 
759 mov ebx,TYPE WORD ; 2 bytes 
760 
761 call WriteHexB ; displays: "7FFF" 
762 
763 
764 
765 
766 
767 WriteInt
768 
769 功能:以十进制数格式在控制台窗口中显示一个32位有符号数
770 
771 入口参数:EAX=一个32位有符号数
772 
773 出口参数:无
774 
775 说明:输出的数字开头没有0,但是有符号位。
776 
777 mov eax,216543 
778 
779 call WriteInt ; displays: "+216543" 
780 
781 
782 
783 
784 
785 WriteString
786 
787 功能:在控制台窗口显示一个以NULL结尾的0字符串。
788 
789 入口参数:EDX=缓冲区偏移地址
790 
791 出口参数:无
792 
793 说明:
794 
795 .data 
796 
797 prompt BYTE "Enter your name: ",0 
798 
799 .code
800 
801 mov edx,OFFSET prompt 
802 
803 call WriteString
804 
805 
806 
807 
808 
809 WriteToFile
810 
811 功能:把缓冲区的内容写入到输出文件中
812 
813 入口参数:EAX=文件柄,EDX=缓冲区偏移地址,ECX=写入的字节数
814 
815 出口参数:EAX=已写入的字节数
816 
817 说明:
818 
819 BUFFER_SIZE = 5000 
820 
821 .data 
822 
823 fileHandle DWORD ? 
824 
825 buffer BYTE BUFFER_SIZE DUP(?) 
826 
827 .code 
828 
829 mov eax,fileHandle 
830 
831 mov edx,OFFSET buffer 
832 
833 mov ecx,BUFFER_SIZE 
834 
835 call WriteToFile 
836 
837 
838 
839 
840 
841 WriteWindowsMsg(仅Irvine32)
842 
843 功能:显示一个描述MS-Windows产生的最后一次错误的字符串。
844 
845 入口参数:无
846 
847 出口参数:无
848 
849 说明:在程序不能成功创建或打开文件时,显示错误提示信息
850 
851 Mov edx,offset filename
852 
853 Call openInputFile
854 
855 .if eax==INVALID_HANDLE_VALUE
856 
857 call WriteWindowsMsg 
858 
859 .endif
860 
861 The following is an example of a message string: 
862 
863 Error 2: The system cannot find the file specified. 

 

 

 

CloseFile:CloseFile过程关闭一个以前打开的文件。文件是以文件句柄handle标识的,文件句柄通过EAX传递。如果文件被成功关闭,EAX中的返回值为非零值。例:

Mov eax,fileHandle

Call CloseFile

 

Clrscr过程用于清除控制台窗口的内容,它通常在程序的开始和结束时使用:

Call waitMsg ;“Press any key…”作用是屏幕擦除前暂停一下,便于看清已有的信息call CLrscr

 

crlf过程把光标定位到控制台窗口下一行的开始,回车换行

Call crlf

 

createOutputFile 过程创建一个磁盘文件并以输出模式打开。

使用时通过EDX传递要创建的文件名的偏移地址。

.data

Filename byte "newfile.txt",0

Handle dword ?

.code

Mov edx,offset filename

Call CreatOutputFile

Cmp eax,INVALID_HANGDLE_VALUE ;如果创建失败,EAX返回值

Je file_error ;显示错误信息

Mov handle,eax ;保存文件句柄

 

Delay过程暂停程序指定的毫秒数。

Mov eax,1000 ;1s

Call delay

 

DumpMem过程功能时以十六进制数格式在控制台窗口显示一块内存的内容。入口参数:ESI为内存的开始地址,ECX为元素数目,EBX为元素尺寸。

.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

 

DumpRegs过程以十六进制数格式显示通用寄存器的内容,并同时显示进位、符号、零和溢出标志的值。

之前用过,不再重复

 

GetCommandTail过程把程序命令行参数复制到一个以空字符结尾的字符串中。零字符串。例如程序Encrypt读取输入文件file1.txt并产生一个输出文件file2.txt:

Encrypt file1.txt,file2.txt

 

.data

cmdTail byte 129 dup(0)

.code

Mov edx,offset cmdTail

Call GetCommmandtail

 

GetMaxXY过程返回控制台窗口缓冲区的大小。

.data

Rows byte ?

Cols byte ?

.code

Call GetMaxXY

Mov rows,dh

Mov cols,dl

 

GetMseconds:返回从午夜开始计算的逝去的毫秒数,返回值在EAX中,这个过程可用来测量两个事件之间的时间间隔,该过程不需要输入参数。

.data

startTime DWORD ?

.code

call GetMseconds

mov startTime,eax

L1:

; (loop body)

loop L1

call GetMseconds

sub eax,startTime ; EAX = loop time, in milliseconds

 

GetTextColor(仅Ivine32):

功能:返回当前控制台窗口的前景色和背景色

入口参数:无

出口参数:AL,高4位背景色,低4位前景色

.data

color BYTE ?

.code

call GetTextColor

mov color,AL

 

Gotoxy:

功能:把光标定位在控制台窗口中指定的行列位置上。

入口参数:dh行,dl列

出口参数:无

说明:默认情况下控制台窗口X坐标的范围079,Y坐标范围024.

mov dh,10 ; row 10

mov dl,20 ; column 20

call Gotoxy ; locate cursor

 

IsDigit

功能:确定AL中的字符是否是有效的十进制数字0~9,

入口参数:AL=ASCII码数值

出口参数:是,ZF=1,否ZF=0

说明:

mov AL,somechar

call IsDigit

 

MsgBox过程显示一个图形界面的弹出消息框,可以设置标题栏要显示的文字。调用时通过EDX传递要显示的字符串的偏移地址,字符串将显示在消息框的中央。还可以通过EBX传递要显示在标题栏中的字符串的偏移地址。EBX清零,标题栏为空。

.data

Caption db "Dialog Tile",0

HelloMsg byte "This is a pop-up message box.",0dh,0ah

byte "Click OK to continue…",0

.code

Mov ebx,offset caption

Mov edx,offset HellMsg

Call MsgBox

 

 

MsBoxAsk过程显示一个带一个YES按钮和No按钮图形界面的弹出消息框。调用时入口参数和MsgBox过程一样,调用时通过EDX传递要显示的字符串的偏移地址,字符串将显示在消息框的中央。EBX传递要显示在标题栏中的字符串的偏移地址。返回参数EAX=6,表示用于选择YES,EAX=7表示用户选择NO

.data

caption BYTE "Survey Completed",0

question BYTE "Thank you for completing the survey."

BYTE 0dh,0ah

BYTE "Would you like to receive the results?",0

.code

mov ebx,OFFSET caption

mov edx,OFFSET questio

call MsgBoxAsk ;(check return value in EAX)

 

 

OpenInputFile(仅Irvine32)

功能:打开一个已存在的磁盘文件进行输入

入口参数:EDX为要打开的文件名的偏移地址

出口参数:创建成功,EAX=文件柄,创建失败,EAX=INVALID_HANDLE_VALUE预定义的常量。

说明:

.data

filename BYTE "myfile.txt",0

.code

mov edx,OFFSET filename

call OpenInputFile

if EAX = INVALID_FILE_HANDLE

the file was not opened successfully

else EAX = handle for the open file endif

 

 

ParseDecimal32

功能:把无符号整数字符串转换为一个32位的二进制数。

入口参数:EDX字符串的偏移地址,ECX=字符串的长度

出口参数:EAX转换后的二进制值

说明:字符串中的非数字字符前面的所有数字都讲被转换,开头的空格将被忽略。

.data

buffer BYTE "8193"

bufSize = ($ - buffer)

.code

mov edx,OFFSET buffer

mov ecx,bufSize

call ParseDecimal32 ; returns EAX

 

 

ParseInteger32

功能:把有符号整数字符串转换为一个32位的二进制数。

入口参数:EDX字符串的偏移地址,ECX=字符串的长度

出口参数:EAX转换后的二进制值

说明:字符串中的非数字字符前面的所有数字都讲被转换,开头的空格将被忽略。

.data

buffer BYTE "-8193"

bufSize = ($ - buffer)

.code

mov edx,OFFSET buffer

mov ecx,bufSize

call ParseInteger32 ; returns EAX

 

 

Random32

功能:生成32位随机整数,并在EAX中返回

入口参数:无

出口参数:EAX=32位随机整数

说明:伪随机,无种子输入

.data

randVal DWORD ?

.code

call Random32

mov randVal,eax

 

Randomize

功能:初始化Random32和RandomRange过程使用的种子值,该种子值使用的是当前时间,精确到1/100s

入口参数:无

出口参数:无

说明:每次生成的随机数序列都不同并且唯一

call Randomize

mov ecx,10

L1:

call Random32

; use or display random value in EAX here...

loop L1

 

 

RandomRange

功能:生成一个在范围0~(n-1)之间的随机整数

入口参数:eax=n

出口参数:eax=随机数

说明:

.data

randVal DWORD ?

.code

mov eax,5000

call RandomRange

mov randVal,eax

 

 

Readchar

功能:从标准输入读取一个字符

入口参数:无

出口参数:AL=输入的字符

说明:不带回显

.data

char BYTE ?

.code

call ReadChar

mov char,al

 

 

ReaDec

功能:读取键盘输入的无符号32位十进制整数并在EAX中返回。

入口参数:无

出口参数:EAX=32位十进制整数

说明:忽略输入字符串开头的空格,从字符串开始处将所有有效的数字字符进行转换,遇到非数字字符则停止。

如果输入的整数数字串为空,则EAX=0,CF=1

如果输入的整数数字串只包含空格,,则EAX=0,CF=1

如果输入的整数大于232-1,则EAX=0,CF=1

除上述情况之外,EAX=转换后的整数CF=0。

.data

intVal DWORD ?

.code call ReadDec

mov intVal,eax

 

ReadFromFile(仅Irvine32)

功能:把输入文件的内容读到一个缓冲区内

入口参数:EAX=文件柄,EDX缓存区偏移地址,ECX=最多要读取的字节数。

出口参数:CF=0,EAX返回从文件中实际读取的字节数,CF=1,EAX返回系统的出错代码。

说明:调用过程WriteWindowsMsg获取出错代码的文本描述

.data

BUFFER_SIZE = 5000

buffer BYTE BUFFER_SIZE DUP(?)

bytesRead DWORD ?

.code

mov edx,OFFSET buffer ; points to buffer

mov ecx,BUFFER_SIZE ; max bytes to read

call ReadFromFile ; read the file

 

 

 

ReadHex

功能:从标准输入读取一个32为十六进制整数

入口参数:无

出口参数:EAX=一个32为十六进制整数

说明:对无效数字不进行错误检查,不区分大小写,最多允许输入8位数字,忽略数字串开头的空格

.data

hexVal DWORD ?

.code

call ReadHex

mov hexVal,eax

 

 

 

ReadInt

功能:从标准输入读取一个32位有符号整数

入口参数:无

出口参数:EAX=一个32位有符号整数

说明:可以输入+号和-号,其余部分只能是数字字符,如果溢出则返回错误信息。从字符串开始处将有效的数字字符转换,遇到非数字字符则停止

.data

intVal SDWORD ?

.code

call ReadInt

mov intVal,eax

 

 

ReadKey

功能:进行键盘检查,单不等待键盘输入

入口参数:无

出口参数:zf=1,未发现按键,ZF=0,发现按键;AL=按键ASCII或零;AH=按键扫描码;DX=虚拟键码,EBX=键盘标志位。

说明:

.data

Char byte ?

.code

L1:

Mov eax,10

Call delay

Call readkey

Jz L1

Mov char,al

 

IsDigit

功能:

入口参数:

出口参数:

说明:

 

ReadString

功能:从标准输入读取一个字符串

入口参数:无

出口参数:EAX=读入的字节数,EDX保存字符串的缓存区偏移地址,ECX=用户最多可输入的字符数+1

说明:回车键结束

.data

buffer BYTE 21 DUP(0) ; input buffer byte

Count DWORD ? ; holds counter

.code

mov edx,OFFSET buffer ; point to the buffer

mov ecx,SIZEOF buffer ; specify max characters

call ReadString ; input the string

mov byteCount,eax ; number of characters

 

SetTextColor过程设置文本输出的前景色和背景色。入口参数EAX存放要设置的色彩属性。如下为色彩属性的常量定义:

 

例:蓝底黄字 yellow+(blue16) ; 前景色+背景色16

Mov eax,white+(blue*16)

Call SetTextColor

 

 

StrLength

功能:返回以NULL结尾的字符串的长度

入口参数:EDX字符串的偏移地址

出口参数:EAX=字符串的长度

说明:

.data

buffer BYTE "abcde",0

bufLength DWORD ?

.code

mov edx,OFFSET buffer ; point to string

call StrLength ; EAX = 5

mov bufLength,eax ; save length

 

 

WaitMsg

功能:显示“Please any key to continue…”,并等待用户按下一个键

入口参数:无

出口参数:无

说明:在显示的数据滚动屏幕消失之前调用本过程,可以暂停以下

Call WaitMsg

 

WriteBin

功能:在屏幕上以ASCII码二进制数格式显示32位整数

入口参数:EAX=32位整数

出口参数:无

说明:

mov eax,12346AF9h

call WriteBin

0001 0010 0011 0100 0110 1010 1111 1001

 

WriteBinB

功能:在屏幕上以ASCII码二进制数格式显示32位整数,可以指定以字节,字或双字方式显示

入口参数:EAX=要显示的整数,EBX=显示方式

出口参数:无

说明:

mov eax,00001234h

mov ebx,TYPE WORD ; 2 bytes

call WriteBinB ; displays 0001 0010 0011 0100

 

 

WriteChar

功能:在控制台窗口显示一个字符

入口参数:AL=要显示的字符

出口参数:无

说明:

Mov al,'A'

Call WriteChar

 

WriteDec

功能:以十进制数格式在控制台窗口中显示一个32位无符号整数,输入的数字开头不填充0

入口参数:EAX=一个32位无符号整数

出口参数:无

说明:

Mov eax,295

Call wrtieDEC

 

WriteHex

功能:以十六进制数格式在标准输出上显示一个32位无符号整数,是以8个十六进制数表示的。

入口参数:EAX=一个32位无符号整数

出口参数:无

说明:

Mov eax,295

Call wrtieHex

 

 

WriteHexB

功能:以十六进制数格式在控制台上显示一个32位无符号整数。如果需要的话,可以在十六进制数前填充0,可以指定以字节,字或双字方式显示。

入口参数:EAX=要显示的整数,EBX=显示方式

出口参数:无

说明:

mov eax,7FFFh

mov ebx,TYPE WORD ; 2 bytes

call WriteHexB ; displays: "7FFF"

 

 

WriteInt

功能:以十进制数格式在控制台窗口中显示一个32位有符号数

入口参数:EAX=一个32位有符号数

出口参数:无

说明:输出的数字开头没有0,但是有符号位。

mov eax,216543

call WriteInt ; displays: "+216543"

 

 

WriteString

功能:在控制台窗口显示一个以NULL结尾的0字符串。

入口参数:EDX=缓冲区偏移地址

出口参数:无

说明:

.data

prompt BYTE "Enter your name: ",0

.code

mov edx,OFFSET prompt

call WriteString

 

 

WriteToFile

功能:把缓冲区的内容写入到输出文件中

入口参数:EAX=文件柄,EDX=缓冲区偏移地址,ECX=写入的字节数

出口参数:EAX=已写入的字节数

说明:

BUFFER_SIZE = 5000

.data

fileHandle DWORD ?

buffer BYTE BUFFER_SIZE DUP(?)

.code

mov eax,fileHandle

mov edx,OFFSET buffer

mov ecx,BUFFER_SIZE

call WriteToFile

 

 

WriteWindowsMsg(仅Irvine32)

功能:显示一个描述MS-Windows产生的最后一次错误的字符串。

入口参数:无

出口参数:无

说明:在程序不能成功创建或打开文件时,显示错误提示信息

Mov edx,offset filename

Call openInputFile

.if eax==INVALID_HANDLE_VALUE

call WriteWindowsMsg

.endif

The following is an example of a message string:

Error 2: The system cannot find the file specified.

posted @ 2022-09-08 15:00  龍飛鳳舞劍無痕  阅读(523)  评论(0)    收藏  举报