汇编语言汇编语言实现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 命令