汇编笔记(2)(完结)
[toc]
# 62.过程相关伪指令
## INVOKE
32位下替代可替代call指令
## addr (只可32位)
调用api时可给函数传递指针
invoke ExitProcess ,0 , addr
## proc 声名过程(函数)
## proto 声名外部函数
ExitProcess PROTO dwExitCode :DWORD
# 字符串相关操作
传送 比较 扫描 保存 加载
## 传送
movsb(byte) movsw(word) movsd(dword
;REP ecx大于0 重复(循环)指令
;REPZ 0标志位置1 及ecx大于0
;REPE
REPNZ REPNE
```
.data
string1 byte "rkvir",0
string2 byte 10 dup(?)
main proc
cld
mov esi,offset string1
mov edi,offset string2
mov ecx,6
rep movsb
mov eax,eax
main endp
end main
```
## 比较
cmp cmpsb cmpsw cmpsd
## 扫描
scasb scasw scasd
在一个字符串中寻找另一个字符串
ax eax
## 保存
stosb stosw stosd
把eax寄存器中的内容存到edi指向的地址
## 加载
LODSB LODSW LODSD
替换的是以下指令
mov al,[esi]
inc esi
# 结构与宏
## 结构
c语言中的结构体
struct (masm中)
```
name struct
sd1 dword ?
sd2 dword ?
name ends
.data
myname name<>
main proc
mov myname.sd1,1
mov eax,myname.sd1
main endp
```
## 宏
定义一个过程,可以多次调用
定义
```
name MACRO char(形参)
过程
mov eax,char
endm
main proc
name 12
main endp
```
# 浮点数
## 浮点数的编码方式
float(32 double(64
符号 指数 尾数
float:1位 符号位 8位指数 23位位数
double:1 11 52
## 基本浮点数指令
正常运算指令加F即可,例如FSUB
使用方式与原指令一致
# 内联汇编
c/c++中使用汇编语言
```
#include
int main(){
_asm mov eax,eax
int var1 = 10;
_asm{
mov ebx,eax
mov ecx,ebx
mov eax,var1
}
return 0;
}
```