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

Peirre3年前我的程序550

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


相关文章

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

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

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

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

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

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

谈谈引导程序的想法。

谈谈引导程序的想法。

当个人电脑一出现就有了磁盘系统,不管是软盘,光盘,硬盘,计算机要应用操作系统就要引导,引导程序一段代码。这引导代码很小,在第一个磁盘的扇区上,平时没什么人注意它。这段代码损坏一个字节,都会造成计算机瘫...

windows 10 控制台命令壳的常规命令。

windows 10 控制台命令壳的常规命令。

windows 10 和 linux 一样有一个控制台,最初也叫文字终端。命令是 cmd.exe  在 windows xp 和 windows 2000 以前是 command.exe经过...

Blender 如何建立.mash 和.x文件。(关于Directx 11,OGRE图形库与Blender)

Blender 如何建立.mash 和.x文件。(关于Directx 11,OGRE图形库与Blender)

OGRE图形开发库已经发展很多年了,因为它是免费开源项目,所以使用还很广泛。OGRE图形库应用须要3d图形数据文件,OGRE图形库默认的是.mash 我们有方法制作它。.mash 文件任何3d应用软件...

谈谈计算机的RTC电路和IO编程的汇编指令。

谈谈计算机的RTC电路和IO编程的汇编指令。

这两天在github.com上写代码,出了几个例子。其中有两个汇编语言编的是时钟代码。这两个例子可以显示系统时钟内存的数据内容。一个是利用BIOS的中断,一个是利用DOS中断。这两个汇编程序主要是利用...