| |

VerySource

 Forgot password?
 Register
Search
View: 1179|Reply: 1

汇编语言基础总结

[Copy link]

2

Threads

3

Posts

2.00

Credits

Newbie

Rank: 1

Credits
2.00

 China

Post time: 2021-10-10 22:28:18
| Show all posts |Read mode
条件指令1. CMP指令
  •                 CMP比较指令不能够引用两个内存位置,两个内存位置至少有一个需要复制到寄存器中,才能进行比较操作。               
  •                 高级汇编选择语句的写法               
                    mov eax, count.if eax > numbermov flag, -1.endif
  •                 程序员可以直接使用4个通用的寄存器。eflag是一个重要的寄存器,它控制着CPU的方方面面,记录了任意时刻CPU的状态。                
  •                 在各种类型指令执行的时候,会在eflag寄存器中用1到2个位作为flag标记。                
  •                 每个flag标记都指令2个字母的缩写名。               
                    BIT0  CF  无符号整数进位               
                    BIT2  PF  偶数位被置位               
                    BIT6  ZF  运算结果为0               
                    BIT7  SF  结果为负               
                    BIT10 DF  从高比特到低比特处理字符串               
                    BIT11 OF 溢出标志               
  •                 更改这些标记的方式是使用CMP指令,CMP指令来比较两个操作数并设置相应的标记。CPU完成上述比较操作,它实际上完成了一个隐性的减法操作,然后设置了相应的标记值。                
  • 可以把寄存器与立即数比较,寄存器与内存比较,立即数与内存比较,两个寄存器比较。禁止两个内存位置比较
2. JE指令
  •                 jg  大于   jge 大于等于  jl  小于  jle 小于等于                
  •                 汇编与高级语言条件语句逻辑是相反的,当判断结果为真的时候,程序不执行紧接着的部分程序代码,而是跳转到其他程序分支。主要把逻辑关系对调以下。                
  •                 变量number 和0进行比较,如果两个值不相等,进行一个不相等的跳转操作               
  • 如果两个值相等,程序控制流不变,顺序执行
IF01:                cmp number, 0    jne ENDIF01THEN01:         dec numberENDIF01:         nop  
  • 为NOP指派一个标记是方便的,方便未来能够添加其他语句
  • IF01  THEN01  ENDIF01 都是可读性的考虑。
; if count > number; flag = -1; end if;IF02:            mov eax, count    cmp eax, number    jle ENDIF02THEN02:     mov flag, -1ENDIF02:     nop3. IF THEN ELSE的汇编写法例子:
;if x>= y;   x--; else;   y--IF03:        mov eax, x    cmp eax, y    jl  ELSE03THEN03:      dec x    jmp ENDIF03ELSE03:      dec yENDIF03:     nop
  • 不要忘记在Then部分结尾使用无条件跳转语句绕过ELSE语句。
  • 注意每一个IF-THEN-ELSE都有一套完整的标记。 增加可读性,便于日后维护程序。
4. 嵌套的IF结构例子:
; if (x<50){;     y++;;  };  else if(x <= 100){;         y = 0;;  };  else{;         y--;;  }IF01:      cmp x, 50    jge ELSE01THEN01:     inc y    jmp ENDIF01ELSE01:     nopIF02:      cmp x, 100    jg  ELSE02THEN02:     mov y, 0    jmp ENDIF02ELSE02:     dec yENDIF02:     NOPENDIF01:
Reply

Use magic Report

1

Threads

2

Posts

2.00

Credits

Newbie

Rank: 1

Credits
2.00

 China

Post time: 2021-10-12 11:33:29
| Show all posts
好文章,谢谢分享
Reply

Use magic Report

You have to log in before you can reply Login | Register

Points Rules

Contact us|Archive|Mobile|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

Quick Reply To Top Return to the list