汇编 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~9, 180 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=0。 440 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.
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:

浙公网安备 33010602011771号