第32部分-Linux x86 64位汇编 数据传输
无符号条件传送指令
无符号条件传送指令依靠进位、零和奇偶校验标志来确定两个操作数之间的区别。
带符号条件传送指令如下:
带符号条件传送指令使用符号和溢出标志表示操作数之间比较的状态。
示例
实例如下,查找数组中一系列整数中最大的一个。
.section .data
output:
.asciz "The largest value is %d\n";//定义字符串
values:
.int 105, 235, 61, 315, 134, 221, 53, 145, 117, 5;//定义整型
.section .text
.globl _start
_start:
nop
movl values, %ebx;//ebx保存最大的整数,第一个是105
movl $1, %edi;//移动计数
loop:
movl values(, %edi, 4), %eax;//逐个加载到eax寄存器。
cmp %ebx, %eax;//和ebx比较
cmova %eax, %ebx;//eax大于ebx,则将eax移动到ebx。
inc %edi;//增加edi
cmp $10, %edi;//是否已经对比了10个。
jne loop
movq $output,%rdi
movq %rbx,%rsi
call printf
movq $60,%rax
movq $0,%rdi
syscall
as -g -o hello.o hello.s
ld -o hello hello.o -lc -I /lib64/ld-linux-x86-64.so.2