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

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

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

今天使用了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


分享给朋友:

相关文章

发布一个雷达显示程序,仅测试,有问题请交流。

发布一个雷达显示程序,仅测试,有问题请交流。

下载地址:雷达显示程序.rar这个雷达显示程序用来显示雷达数据的。使用易语言编写。数据部分还没完善。欢迎提意见。...

Radasm 编辑器配置VC2010下的Opencv 环境。

Radasm 编辑器配置VC2010下的Opencv 环境。

Opencv 下载地址:https://opencv.org/releases.html备用下载地址1:https://blog.csdn.net/yanzi1225627/article/detai...

关于ch341驱动,联动3D打印机USB串口通讯.

关于ch341驱动,联动3D打印机USB串口通讯.

手上有个3D打印机,搬家的原因,好久没用.天气热了,打印温度很适合,正好可以使用.又过了一年.发现linux 版本内核已经升级,和原来的系统不一样了. 按照3D打印机的说明,和寻找它的程序,原来的方法...

linux 下的 opengl SDK。

linux 下的 opengl SDK。

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

关于DOSBOX的简单说明。

关于DOSBOX的简单说明。

linux 下的共享软件DOSBOX 在有些版本的linux 中不能使用鼠标。网上说明要换声卡地址和中断,连接鼠标端口才可以使用。 曾经设置过,可以使用参数不记得。有个解决方法。这是软件问题。 先卸载...

linux mint 20 下编译最新内核所添加的文件。

linux mint 20 下编译最新内核所添加的文件。

linux mint 20 下编译最新内核文件所需要的两个文件包。sudo apt-get install libncurses5-devsudo apt-get install libssl-dev...