阅读(576) (0)

标准控制结构如何应用到Assembly

2016-10-27 11:18:48 更新

If语句

下面的伪码:

if ( 条件)
  then block ;
else
  else block ;

可以像这样被应用:

1              ; 设置FLAGS的代码
2              jxx       else_block        ; 选择xx,如果条件为假,则分支
3              ; then模块的代码
4              jmp endif
5 else_block:
6              ; else模块的代码
7 endif:

如果没有else语句的话,那么else block分支可以用endif分支取代。

1              ; 设置FLAGS的代码
2              jxx endif                     ; 选择xx,如果条件为假,则分支
3              ; then模块的代码
4 endif:

While循环

while循环是一个顶端测试循环:

while( 条件) {
  循环体;
}
这个可以翻译成:
1 while:
2              ; 基于条件的设置FLAGS的代码
3              jxx endwhile ; 选择xx,如果条件为假,则分支
4              ; 循环体
5              jmp while
6 endwhile:

Do while循环

do while循环是一个末端测试循环:

do {
   循环体;
} while( 条件);

这个可以翻译成:

1 do:
2              ; 循环体
3              ; 基于条件的设置FLAGS的代码
4              jxx do               ; 选择xx,如果条件为假,则分支|

例子:查找素数

这一小节是一个查找素数的程序。根据回忆,素数是一个只能被1和它本身整除的数。没有公式来做这件事情。这个程序使用的基本方法是在一个给定的范围内查找所有奇数的因子。如果一个奇数没有找到一个因子,那么它就是一个素数。图2.3 展示了用C写的基本的算法。

C写的基本算法

这是汇编语言版:
实例1
实例2
实例3