以下是第5章中讲到的 CMOV 的指令的例子,原来的源码是这样的:
# cmovtest.s - An example of the CMOV instructions
.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
movl $1, %edi
loop:
movl values(, %edi, 4), %eax
cmp %ebx, %eax
cmova %eax, %ebx
inc %edi
cmp $10, %edi
jne loop
pushl %ebx
pushl $output
call printf
addl $8, %esp
pushl $0
call exit
当前使用环境为 Linux cnhz-cmpl42 4.15.0-197-generic #208-Ubuntu SMP Tue Nov 1 17:23:37 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux,这个程序是没法运行的。所以修改成如下:
# cmovtest.s - An example of the CMOV instructions
.section .data
output:
.asciz "The largest value is %d\n"
values:
.int 105, 235, 61, 315, 134, 21, 53, 145, 1117, 50
temp:
.quad 0 #用于存放最大的那个数,因为这个参数是要加载到 rsi 寄存器的,如果用直接用原来的 ebx,则在 movl %ebx, %rs

最低0.47元/天 解锁文章
4609

被折叠的 条评论
为什么被折叠?



