汇编语言编程基础(1)

一、汇编语言的基本元素

整数常量
• h十六进制、q/o八进制、d十进制、b二进制
• 如果整数常量后面没有基数后缀,默认是十进制整数
• 以字母开头的十六进制常量前面必须加0
整数表达式

算术运算符优先级
()优先级1
*、/、MOD优先级2
+、-优先级3

字符常量
• 单引号或者双引号括起来的单个字符。
• ,0表示字符串的截止
• 嵌套引号

print ‘Hello World’ on the terminal window”,0print “Hello World” on the terminal window’,0

数据标号
• 标识变量的地址,方便变量的引用
• 相对.data数据段在内存起始地址的偏移

count DWORD 100
array DWORD 100, 101, 102, 103

OFFSET
• 获取数据标号的内存地址

.data
str_hello BYTE “Hello World!”,0
.code
mov eax, OFFSET str_hello

eax储存str_hello的内存地址
代码标号
• 标识代码的地址
• 必须以冒号(:)结尾
• 通常作为跳转、循环指令的目标地址

target:
	mov eax,100h
	…
	jmp target

指令助记符
• 指令助记符是一个简短的单词,用于表示一条指令。

指令助记符功能
mov把后面的值赋值给前面
addadd a,b是a+b的意思
subsub a,b是a-b的意思
mulmula,b是a*b的意思
jmp相当于c++的go to语句
call用于调用前面写好的过程

操作数
操作数是指令的操作对象:寄存器、内存、常量、I/O端口
• inc eax:eax寄存器的值加1
• mov count,ebx:mov指令有两个操作数:count、ebx
NOP指令
• NOP指令,空操作
• 用于计时循环
• NOP指令占用1个字节的内存
• 用于后继指令的对齐
伪指令
• 伪指令内嵌在汇编语言源代码中,由汇编器识别、执行相应动作的命令
• 用于定义变量、段、过程、汇编器选项等

定义变量1mov eax, my_var ; mov指令
定义变量2my_var DWORD 100h;DWORD伪指令
定义段.data、.code、.stack
定义过程PROC-ENDP

二、定义数据

数据类型

数据类型简写内存占位
BYTEdb8位
WORDdw16位
DWORDd32位
QWORDdq64位

数据定义
语法:[变量名] 数据定义伪指令 初始值
初始值
• 数据定义语句中要指定初始值
• 多个初始值用逗号隔开my_var DWORD 0, 1, 2, 3
• 0: 可以指定初始值为0
• ?: 表示在程序运行的时候初始化该变量
数据声明的位置
• .data段声明初始化的变量

.data
	dw_var1 DWORD 0

• .data?段声明未初始化的变量

.data?
	dw_var2 DWORD ?

定义字符串

str_hello BYTE “Hello World!”, 0Dh, 0Ah, 
	BYTE “I love assembly language”, 
	BYTE 0Dh, 0Ah, 0

• 0Dh和0Ah是CR/LF(回车、换行)的ASCII编码
字符串的结尾是0
DUP伪指令
• 为字符串或者数组分配内存空间
• BYTE 20 DUP(0);20个字节的内存空间
• BYTE 4 DUP(“Hello”):20个字节,连续的4个“Hello”,每个“Hello”5字节
BYTE是‘0’,‘hello’的类型,‘20’,'5’是它们的数量

三、符号常量

符号常量
• 符号常量(或符号定义),将标识符与整数表达式或文本联系起来
• 符号常量不占用存储空间
• 变量占用存储空间
等号伪指令
• 等号伪指令,将符号名和整数表达式联系起来,相当于赋值操作COUNT = 500
EQU伪指令
• EQU伪指令将符号名与整数表达式或任意文本联系起来,相当于赋值操作

name EQU expression
name EQU symbol
PI EQU <3.1415926>
press_key EQU <“Press any key to continue…”, 0> 
prompt BYTE pressKey ; 

计算数组和字符串的大小
• $是当前所处的地址
• $可以用来计算数组或字符串的大小

str_hello BYTE “Hello World!”, 0Dh, 0Ah, 
BYTE “I love assembly language”, 
BYTE 0Dh, 0Ah, 0
str_size = ($ - str_hello)

计算数组大小

dw_array DWORD 0, 1, 2, 3, 4
array_size = ($ - dw_array)/4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值