给定if_else.s文件,完成如下要求: 修改if_else.s中if_else片段,只允许修改分支条件,不需修改分支中的内容,达到如下要求。 A:输入 12 15 ,要求现在if_else的返回值为1 (原来返回值为0) B:输入学号后四位,(如学号后四位是1234则输入12 34 )要求输出结果为2 (A、B分别得到不同的if_else.s文件,分别重新命名为if_else_A.s以及if_else_B.s) Hints: a:可以使用gcc if_else.s –o if_else将.s文件生成可执行程序。可执行程序中会根据输入将结果输出到屏幕。(可具此判断修改后的.s文件是否达到要求) b:if_else片段如下:可修改语句已用红色标出 if_else: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $16, %esp cmpl $0, 8(%ebp) jle .L2 cmpl $29, 12(%ebp) jg .L2 movl $0, -4(%ebp) jmp .L3 .L2: cmpl $0, 8(%ebp) jle .L4 cmpl $30, 12(%ebp) jle .L4 movl $1, -4(%ebp) jmp .L3 .L4: movl $2, -4(%ebp) .L3: movl -4(%ebp), %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE0: .size if_else, .-if_else .section .rodata .LC0: .string "%d %d" .LC1: .string "%d\n" .text .globl main .type main, @function
时间: 2023-06-25 12:02:07 浏览: 134
if.when.else.zip_If..._stems3hq_vhdl_数码管 使能端_数码管使能端
以下是if_else_A.s文件的修改代码:
if_else:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $16, %esp
cmpl $12, 8(%ebp) #修改条件,判断第一个参数是否等于12
jne .L2 #如果不等于12,跳转到.L2
cmpl $15, 12(%ebp) #如果第一个参数等于12,判断第二个参数是否大于15
jle .L3 #如果小于等于15,跳转到.L3
.L2:
movl $0, -4(%ebp) #如果条件不满足,则将返回值设为0
jmp .L4
.L3:
movl $1, -4(%ebp) #如果条件满足,则将返回值设为1
.L4:
movl -4(%ebp), %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.size if_else, .-if_else
.section .rodata
.LC0:
.string "%d %d"
.LC1:
.string "%d\n"
.text
.globl main
.type main, @function
以下是if_else_B.s文件的修改代码:
if_else:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $16, %esp
movl 8(%ebp), %eax
andl $0xFFFF, %eax #取出学号后四位
cmpl $1234, %eax #判断学号后四位是否等于1234
jne .L2 #如果不等于1234,跳转到.L2
movl $2, -4(%ebp) #如果等于1234,将返回值设为2
jmp .L3
.L2:
cmpl $30, 12(%ebp) #如果学号后四位不等于1234,判断第二个参数是否小于等于30
jg .L4 #如果大于30,跳转到.L4
movl $1, -4(%ebp) #如果小于等于30,将返回值设为1
jmp .L3
.L4:
movl $0, -4(%ebp) #如果大于30,将返回值设为0
.L3:
movl -4(%ebp), %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.size if_else, .-if_else
.section .rodata
.LC0:
.string "%d %d"
.LC1:
.string "%d\n"
.text
.globl main
.type main, @function
可以通过以下命令将.s文件编译成可执行程序并测试:
gcc if_else_A.s -o if_else_A
./if_else_A 12 15
gcc if_else_B.s -o if_else_B
./if_else_B 20191234
阅读全文