刚刚上手的一个汇编程序nasm。
今天使用了masm32软件,总有使不上劲的感觉。
因为intel 指令集很多都没有,自己想测试一下,一边翻资料,一边使用。
windows 编程好用,但是指令不全,心里总是感觉差一点。又不是编大程序,只是学习用。
在http://www.nasm.us/ 这个网站找到了一个汇编语言,还不错。更新了好多次。
nasm改变了很多次,这次我下了个新的。当然也不会忘记golink这个链接器。
我使用的是x64dbg 这个64位调试器,可以调试64位的指令。
asm 文件和x64dbg 的文件对比。看见没有些指令在 x64dbg 上没有显示出来。
证明nasm 这汇编编译程序的指令是全的。快快使用吧。
我的版本是NASM version 2.15rc12 和 GoLink.Exe Version 1.0.3.0
附测试umwait 命令是否能运行的源码图片
使用nasm 和 golink 编译。
源码资源打包
源码内容
[bits 32] extern MessageBoxA extern GetModuleHandleA extern ExitProcess ;******************************************************************** ; win32n.inc include ;******************************************************************** ;%include 'windows.inc' ;=================================================================== ; CPU识别UMWAIT指令和MWAIT指令的例子 ; ;编译方法: ;NASM -fwin32 t1.asm ;GoLINK /entry start t1.obj kernel32.dll user32.dll msvfw32.dll ; ; by Y.Pierre 2021/4/29 ;=================================================================== [section .data] text db "信息提示",0 text1 db "不支持umwait指令",0 text2 db "支持umwait指令",0 text3 db "支持mwait指令",0 text4 dd 0 [section .text] start: enter 0,0 push 0 call GetModuleHandleA push eax ;cli mov eax,07h ;识别umwait 指令 和umwait指令一起的还有umonitor指令 mov ecx,0 cpuid shr ecx,5 jnc c1 mov eax,1 umwait eax ;sti c1: leave pop eax push 0 push text jnc c2 push text2 jmp c3 c2: push text1 c3: push 0 call MessageBoxA clc ;识别nwait 指令,两种方法 mov eax,01h mov ecx,0 cpuid ; push 0 ; push text ; mov [text4],ecx ; push text4 ; push 0 ; call MessageBoxA shr ecx,3 jc c4 clc ;识别mwait指令 mov eax,05h mov ebx,0 mov ecx,0 cpuid shr ecx,2 jnc e1 mwait jmp c4 c4: push 0 push text push text3 push 0 call MessageBoxA e1: push 0 call ExitProcess ret 16