⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textout.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
ClassName       db "WinClass",0
TitleName        db "文本输出",0
Verse1             db "清明时节雨纷纷,"
Verse2             db "路上行人欲断魂。"
Verse3             db "借问酒家何处有,"
Verse4             db "牧童遥指杏花村。"
FontName        db "楷体",0
.data?
hInstance	HINSTANCE    ?
.code
start:
   invoke GetModuleHandle, NULL
   mov    hInstance,eax
   invoke WinMain, NULL,NULL,NULL, SW_SHOWDEFAULT
   invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
   LOCAL wc:WNDCLASSEX
   LOCAL msg:MSG
   LOCAL hwnd:HWND
   mov   wc.cbSize,SIZEOF WNDCLASSEX
   mov   wc.style, CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
   mov   wc.lpfnWndProc, OFFSET WndProc
   mov   wc.cbClsExtra,NULL
   mov   wc.cbWndExtra,NULL
   mov   eax, hInstance
   mov   wc.hInstance,eax
   invoke GetStockObject,WHITE_BRUSH 
   mov   wc.hbrBackground,eax
   mov   wc.lpszMenuName,NULL
   mov   wc.lpszClassName,OFFSET ClassName
   invoke LoadIcon,NULL,IDI_ASTERISK
   mov   wc.hIcon,eax
   mov   wc.hIconSm,0
   invoke LoadCursor,NULL,IDC_HAND
   mov   wc.hCursor,eax
   invoke RegisterClassEx, addr wc
   invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW+WS_EX_TOPMOST,addr ClassName,\
      addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
      NULL,NULL,hInst,NULL
   mov   hwnd,eax
   invoke ShowWindow,hwnd,CmdShow
   invoke UpdateWindow,hwnd
   .while TRUE
      invoke GetMessage, addr msg,NULL,0,0
      .BREAK .IF (!eax)
         invoke TranslateMessage,addr msg
         invoke DispatchMessage, addr msg
   .endw
   mov eax,msg.wParam
   ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
   LOCAL hdc:HDC
   LOCAL ps:PAINTSTRUCT
   LOCAL  hOldF:HFONT       
   LOCAL   hColor:COLORREF     
   LOCAL  SizeRgn:SIZEL        
   LOCAL  tm:TEXTMETRICA  
   LOCAL  pt:POINT 
   .if     uMsg==WM_DESTROY
      invoke PostQuitMessage,NULL
   .elseif uMsg==WM_PAINT
      invoke BeginPaint,hWnd,addr ps
      mov   hdc,eax
      mov  pt.x,50
      mov  pt.y,50
      invoke CreateFont,30,10,0,0,300,0,TRUE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,addr FontName
      invoke SelectObject,hdc,eax
      mov hOldF,eax
      invoke SetBkMode,hdc,OPAQUE
      RGB 0FFh,0,0
      invoke SetTextColor,hdc,eax
      mov hColor,eax
      invoke GetTextMetrics,hdc,addr tm
      invoke TextOut,hdc,pt.x,pt.y,addr Verse1,sizeof Verse1
      invoke GetTextExtentPoint32,hdc,addr Verse1,sizeof Verse1,addr SizeRgn
      mov eax,pt.x
      add eax,SizeRgn.x
      add eax,10
      invoke TextOut,hdc,eax,pt.y,addr Verse2,sizeof Verse2   
      mov eax,pt.y
      add eax,tm.tmHeight
      add eax,tm.tmExternalLeading
      add eax,10
      mov pt.y,eax
      invoke TextOut,hdc,pt.x,pt.y,addr Verse3,sizeof Verse3
      invoke GetTextExtentPoint32,hdc,addr Verse3,sizeof Verse3,addr SizeRgn
      mov eax,pt.x
      add eax,SizeRgn.x
      add eax,10
      invoke TextOut,hdc,eax,pt.y,addr Verse4,sizeof Verse4      
      invoke SelectObject,hdc,hOldF
      invoke SetTextColor,hdc,hColor           
      invoke EndPaint  ,hWnd,addr ps
   .else
      invoke DefWindowProc,hWnd,uMsg,wParam,lParam		
      ret
   .endif
   xor eax,eax
   ret
WndProc endp
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -