基本格式
汇编语言基本格式:
include irvine32.inc .data .code main proc main endp end main
基础指令
- 乘法imul eax,ebx
- 除法div eax,ebx
- 加法add eax,ebx
- 减法sub eax,ebx
- 自减dec num
- 自增inc num
- 乘2[左移一位] shl eax,1
- 除2[右移一位] shr eax,1
- 有符号数中:
- cmp 比较大小
- jz
- jmp 无条件跳转
- jl 小于跳转
- jle 小于等于跳转
- jg 大于跳转
- jge 大于等于跳转
- je 等于跳转
- 无符号数中:
- ja 大于跳转
- jae 大于等于跳转
- jb 小于跳转
- jbe 小于等于跳转
- je 等于跳转
- jna 不大于跳转
- jne 不等于跳转
- jnb 不小于跳转
函数
函数特点:
1.不能进行传参
2.无返回参数
函数格式:
- 函数名 proc
- ....
- ret
- 函数名 endp
- ;调用函数
- call 函数名
参数的传递需使用寄存器传参方式,即不建议在命令中写入数字参数。
举例:乘法应写为imul eax,edx,而不是imul eax,6
用函数求1+2+…+N
C语言描述:
#include <stdio.h> int sum(int n) { int result=0; for(int i=1;i<=n;i++) { result+=i; } return result; } int main() { int n=10; int result1=sum(n); printf("%d",result1); }
汇编语言:
include irvine32.inc .data n dword 10 sum dword ? .code ; 求1+2+3+...+N cacul proc xor eax, eax ; 清空累加器 mov ecx, n mov ebx, 1 ; 将循环计数器放入 ebx sumloop: add eax, ebx inc ebx loop sumloop mov sum, eax ret cacul endp main proc call cacul ; 调用 cacul 过程 mov eax, sum ; 将结果放入 eax call writeint ; 输出结果 ret main endp end main
运行结果: