当前位置:首页 > 我的程序 > 正文内容

刚刚上手的一个汇编程序nasm。

Peirre4年前 (2021-04-28)我的程序714

今天使用了masm32软件,总有使不上劲的感觉。

因为intel 指令集很多都没有,自己想测试一下,一边翻资料,一边使用。

windows 编程好用,但是指令不全,心里总是感觉差一点。又不是编大程序,只是学习用。

http://www.nasm.us/ 这个网站找到了一个汇编语言,还不错。更新了好多次。

nasm改变了很多次,这次我下了个新的。当然也不会忘记golink这个链接器。

无标题.png

我使用的是x64dbg 这个64位调试器,可以调试64位的指令。

asm 文件和x64dbg 的文件对比。看见没有些指令在 x64dbg 上没有显示出来。

证明nasm 这汇编编译程序的指令是全的。快快使用吧。

我的版本是NASM version 2.15rc12 和 GoLink.Exe Version 1.0.3.0

附测试umwait 命令是否能运行的源码图片

使用nasm 和 golink 编译。

源码资源打包

t1.zip

源码内容

[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


分享给朋友:

相关文章

随手写的时间设置程序,主要是防止系统时间无故修改。

随手写的时间设置程序,主要是防止系统时间无故修改。

程序说明:测试版程序功能。同步系统时间数据可选月历,手工输入可自动识别时间修改,修改后一分钟报警。测试版没有恢复时间功能。以后会增加。欢迎下载的朋友帮助我找程序问题,没有花多少功夫,请多多原谅。这个程...

几种在linux中的调试器的编译结果。

几种在linux中的调试器的编译结果。

很多人用源码进行编译,会不成功,原因有很多,我现在讲讲linux 下必有的gdb调试器来说明一下。我用的linux 系统 是 优麒麟 19.04.10.1 加强版,属于试用版。随系统自带的gdb是8....

linux 下的汉字输入法.

linux 下的汉字输入法.

各位老师,才子,同事们好!有很多初级玩linux的同学都会碰到一个难题,也就是在linux 下的汉字输入法.这个问题一直困绕了linux 使用者多年.我还好,每次都使用正常.现在说说心得笔记就可以了....

linux 下的 opengl SDK。

linux 下的 opengl SDK。

opengl 图形库是开放式图形库,最近出了一个freeglut3 我们下载它:sudo apt-get install freeglut3sudo apt-get install freeglut3...

linux 下的《仙剑奇侠传》

linux 下的《仙剑奇侠传》

以前的DOS游戏《仙剑奇侠传》是炙制人口的一个很容易上手的游戏。这个游戏流行了很多年。很多人在玩过多年以后,重温旧梦,回味游戏之中的情感。这个游戏再版了很多次了。现在linux 下也可以直接玩这个游戏...

USB设备的插入机制与USB驱动故障。

USB设备的插入机制与USB驱动故障。

USB主机检测设备,首先在USB集线器的每个端口的D+,D-上,分别接了一个15K欧姆的下拉电阻到地。集线器端口为空时,被这两个电阻拉低了电平。在USB设备端,D+或者D- 上接了上拉1.5K电阻。全...