|
在熟悉指令、偽指令和匯編語(yǔ)法的過(guò)程中, 首先需要的是輸出顯示的手段. 我剛開(kāi)始學(xué)習(xí)時(shí)使用的是控制臺(tái)輸出, 最后發(fā)現(xiàn)既然是 Win32 匯編還是用 Debug 輸出更好. 下面是之前嘗試出的控制臺(tái)輸出的幾種辦法: 1、使用 MASM 提供的 StdOut 函數(shù); 2、使用系統(tǒng) API: 3、使用微軟 C 標(biāo)準(zhǔn)庫(kù) msvcrt.dll 中的 printf 函數(shù). 使用 MASM 的 StdOut 函數(shù): ; Test3_1.asm ; 測(cè)試代碼前應(yīng)先建立一個(gè)控制臺(tái)工程: 文件 -> 新建工程 -> Console App ... .386 .model flat, stdcall include masm32.inc include kernel32.inc includelib masm32.lib includelib kernel32.lib .data szText db "Hello World!", 0 .code start: invoke StdOut, addr szText ret ;ret 是用于子程序返回的指令, 這里用它代替 ExitProcess(在沒(méi)有生成 Win32 窗口時(shí)是可以的) end start 使用系統(tǒng) API 函數(shù):
使用微軟 C 標(biāo)準(zhǔn)庫(kù)中的 printf 函數(shù); msvscrt.inc 把它聲明做 crt_printf ; Test3_3.asm .386 .model flat, stdcall include msvcrt.inc includelib msvcrt.lib .data szText db 'Hello World!', 0 .code start: invoke crt_printf, addr szText ret end start 三種方法相比之下, 應(yīng)推薦使用 C 函數(shù) crt_printf; 因?yàn)樗梢苑奖爿敵龈鄶?shù)據(jù)類型, 如: ; Test3_4.asm .386 .model flat, stdcall include msvcrt.inc includelib msvcrt.lib .data szFmt db 'EAX=%d; ECX=%d; EDX=%d', 0 .code start: mov eax, 11 mov ecx, 22 mov edx, 33 invoke crt_printf, addr szFmt, eax, ecx, edx ret end start |
|
|
來(lái)自: aaie_ > 《學(xué)Win32匯編》