汇编语言汇编语言实现if while for,以及编写冒泡排序

Posted 九死九歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言汇编语言实现if while for,以及编写冒泡排序相关的知识,希望对你有一定的参考价值。

一、if的实现

  c语言代码:

if (ax == bx) {
	/* codes */
}

if (ax) {
	/* codes */
}

if (ax < bx) {
	/* codes */
}

  汇编代码

cmp ax, bx
jne e0
	;codes;
e0:

cmp ax, 0
je e1
	;codes;
e1:

cmp ax, bx
jge e2
	;codes;
e2:

二、if…else…的实现

  c语言代码

if (ax) {
	/* codes1 */
} else {
	/* codes2 */
}

  汇编代码

cmp ax, 0
je s:
	;codes1;
jmp e	
s:
	;codes2;
e:

三、if…else if…else的实现

  c语言代码

if (ax < 60) {
	/* code1 */
} else if (ax < 70) {
	/* code2 */
} else if (ax < 80) {
	/* code3 */
} else {
	/* code4 */
}
cmp ax, 60
jge s0
	;codes1;
jmp e
s0:
cmp ax, 70
jge s1
	;codes2;
jmp e
s1:
cmp ax, 80
jge s2
	;codes3;
jmp e
s2:
	;codes4;
e:

三、while的实现

  c语言代码:

while (ax) {
	/* codes */
}

while (ax) {
	if (bx) {
		/* codes */
		break;
	}
}

while (ax) {
	if (bx) {
		/* codes */
		continue;
	}
}

while (ax) {
	if (bx) {
		/* codes1 */
	} else {
		/* codes2 */
	}
}

  汇编语言代码

s:
cmp ax, 0
jne e
	;codes;
jmp s
e:

s0:
cmp ax, 0
jne e0
	cmp bx, 0
	je e1
		;codes;
		jmp e0
	e1:
jmp s0
e0:

s0:
cmp ax, 0
jne e0
	cmp bx, 0
	je e1
		;codes;
		jmp s0
	e1:
jmp s0
e0

s0:
cmp ax, 0
jne e0
	cmp bx, 0
	je s1
		;codes;
	jmp e1
	s1:
		;codes;
	e1:
jmp s0
e0:

四、for的实现

  ·c语言代码

int i;
for(i = 0; i < n; i++) {
	/* codes */
}

  汇编代码

mov cx, ax
mov si, 0
s:
	;codes;
	inc si
loop s

  或者也可以这样:

  先将for转写成while

int i = 0;
while (i < n) {
	/* codes */
	i++;
}

  相应的汇编代码:

mov si, 0
s:
cmp si, ax
jge e
	;codes;
	inc si
jmp s
e:

五、实例

  我们来敲一个冒泡排序吧。

  先写c语言版本的

#include<stdio.h>

int main() {
	
	int n = 5;
	int a[n] = {1, 4, 3, 5, 2};
	int i, j;
	
	for(i = 0; i < n; i++) {
		for (j = i; j < n; j++) {
			if (a[i] > a[j]) {
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
	
	for (i = 0; i < n; i++) {
		printf("%d\\t", a[i]);
	}
	
} 

  用上面的方法把这个代码转写成汇编语言

assume cs : code, ds : data

data segment
	dw 1, 4, 3, 5, 2
data ends

stack segment
	dw 8 dup(0)
stack ends

code segment

start:
	
	mov ax, data
	mov ds, ax
	
	mov ax, stack
	mov ss, ax

	mov ax, 5 ;ax表示数组的长度
	mov cx, ax
	add ax, ax

	mov si, 0 ;si相当于i
	s0:
		mov di, si ;di相当于j
		s1:
		cmp di, ax
		jge e1
			mov bx, [si] ;cmp的两个操作数不能同时为内存
			cmp bx, [di] ;故把其中一个存到寄存器中
			jle e2
				push [si]
				push [di]
				pop [si]
				pop [di]
			e2:
			add di, 2
		jmp s1
		e1:
	add si, 2
	loop s0

	mov ax, 4c00H
	int 21H

code ends

end start

以上是关于汇编语言汇编语言实现if while for,以及编写冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

if for while until case select 命令

python基础语言以及if/while语句结构

c语言while,if表达式的问题,请教高手!

c语言中while(num)或if(num)就执行语句,num表示啥?

Python—— 控制流:if & for & while

c语言无限循环while和for(;;)的区别