跳转到内容

x86 汇编/MASM 语法

来自维基教科书,开放的书籍,开放的世界

本页将解释使用 MASM 语法的 x86 编程,并将讨论如何使用 MASM 的宏功能。其他汇编器,如 NASMFASM,使用与 MASM 不同的语法,但它们都使用 Intel 语法。

指令顺序

[编辑 | 编辑源代码]

MASM 指令的运算符通常与 GAS 指令相反。例如,指令通常写成 指令 目标, 源

mov 指令,写成如下

mov al, 05h

将把值 5 移动到 al 寄存器。

指令后缀

[编辑 | 编辑源代码]

MASM 不使用指令后缀来区分大小(字节、字、双字等)。

MASM 被称为“宏汇编器”或“Microsoft 汇编器”,这取决于你问谁。但无论你的答案来自哪里,事实是 MASM 有一个强大的宏引擎,以及许多立即可用的内置宏。

MASM 指令

[编辑 | 编辑源代码]

MASM 有大量指令可以控制某些设置和行为。与 NASM 或 FASM 相比,它有更多指令。

.model small
.stack 100h

.data
msg	db	'Hello world!$'

.code
start:
	mov	ah, 09h   ; Display the message
	lea	dx, msg
	int	21h
	mov	ax, 4C00h  ; Terminate the executable
	int	21h

end start

MASM510 编程的简单模板

[编辑 | 编辑源代码]
;template for masm510 programming using simplified segment definition
 title YOUR TITLE HERE
 page 60,132 
 ;tell the assembler to create a nice .lst file for the convenience of error pruning
 .model small 
 ;maximum of 64KB for data and code respectively
 .stack 64
 .data
 ;PUT YOUR DATA DEFINITION HERE
 .code
 main proc far 
 ;This is the entry point,you can name your procedures by altering "main" according to some rules
 mov ax,@DATA 
 ;load the data segment address,"@" is the opcode for fetching the offset of "DATA","DATA" could be change according to your previous definition for data
 mov ds,ax 
 ;assign value to ds,"mov" cannot be used for copying data directly to segment registers(cs,ds,ss,es)
 ;PUT YOUR CODE HERE
 mov ah,4ch
 int 21h 
 ;terminate program by a normal way
 main endp 
 ;end the "main" procedure
 end main 
 ;end the entire program centering around the "main" procedure
华夏公益教科书