【汇编语言实战】基础知识+函数的引用(求1+2+..+N)+OllyDBG的使用

简介: 【汇编语言实战】基础知识+函数的引用(求1+2+..+N)+OllyDBG的使用

基本格式

汇编语言基本格式:


include irvine32.inc
.data
.code
main proc
main endp
end main


基础指令

  1. 乘法imul eax,ebx
  2. 除法div eax,ebx
  3. 加法add eax,ebx
  4. 减法sub eax,ebx
  5. 自减dec num
  6. 自增inc num
  7. 乘2[左移一位] shl eax,1
  8. 除2[右移一位] shr eax,1

  9. 有符号数中:
  10. cmp 比较大小
  11. jz
  12. jmp 无条件跳转
  13. jl 小于跳转
  14. jle 小于等于跳转
  15. jg 大于跳转
  16. jge 大于等于跳转
  17. je 等于跳转

  18. 无符号数中:
  19. ja 大于跳转
  20. jae 大于等于跳转
  21. jb 小于跳转
  22. jbe 小于等于跳转
  23. je 等于跳转
  24. jna 不大于跳转
  25. jne 不等于跳转
  26. jnb 不小于跳转


函数

函数特点:

1.不能进行传参

2.无返回参数


函数格式:


  1. 函数名 proc
  2. ....
  3. ret
  4. 函数名 endp


  5. ;调用函数
  6. 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


运行结果:

目录
相关文章
|
6月前
|
C语言
【汇编语言实战】实现九九乘法表
【汇编语言实战】实现九九乘法表
53 2
|
6月前
|
C语言
【汇编语言实战】输入一个无符号整数求其逆序
【汇编语言实战】输入一个无符号整数求其逆序
45 2
|
6月前
|
C语言
【汇编语言实战】两个32位数的相加运算
【汇编语言实战】两个32位数的相加运算
55 2
|
6月前
|
C语言
【汇编语言实战】八皇后问题
【汇编语言实战】八皇后问题
40 2
|
6月前
|
C语言
【汇编语言实战】实现输出集合{1,2,...,n}全排列
【汇编语言实战】实现输出集合{1,2,...,n}全排列
42 1
|
6月前
|
C语言
【汇编语言实战】给定一个句子,将大写字母变为小写
【汇编语言实战】给定一个句子,将大写字母变为小写
63 1
|
6月前
|
C语言
【汇编语言实战】最小公倍数和最大公约数
【汇编语言实战】最小公倍数和最大公约数
84 1
|
6月前
|
C语言
【汇编语言实战】二分查找
【汇编语言实战】二分查找
49 1
|
6月前
|
C语言
【汇编语言实战】正整数的素数分解
【汇编语言实战】正整数的素数分解
38 1
|
6月前
|
C语言
【汇编语言实战】冒泡排序
【汇编语言实战】冒泡排序
52 1
【汇编语言实战】冒泡排序