apple_50569014 2024-05-21 10:48 采纳率: 33.3%
浏览 3

Y86-64汇编代码 CSAPP家庭作业4.47 jmp L2处于执行阶段时 L2的 rrmovq %rsi,%r8 处于译码阶段 为什么此时 译码阶段的寄存器的Stat的值为HLT?

深入理解计算机系统 第四章 家庭作业4.47

img

请问一下Y86-64汇编格式为什么运行不下去了,在L2第一行就中止了
jmp L2处于执行阶段时 L2的 rrmovq %rsi,%r8 处于译码阶段 为什么此时 译码阶段的寄存器的Stat的值为HLT?我明明是传送一个值`为什么传送一个值会导致HLT?


/* bubble.ys */
.pos 0
    irmovq stack, %rsp
    call main
    halt

# Array of 4 elements
.align 8
data:
  .quad 0x0000000000000004
  .quad 0x0000000000000003
  .quad 0x0000000000000002
data_end:
  .quad 0x0000000000000001

main:
  irmovq data,%rdi
    irmovq data_end,%rsi
    call bubble_a
    ret

# long bubble_a(long *data, long *end)
# data in %rdi, end in %rsi
bubble_a:
  jmp L2
L3:
  irmovq $8,%rdx       #L3
  addq   %rdx,%rax     #i+1
L5:
  rrmovq %rax,%r9      #L5
  subq %rsi,%r9        #i-end
  jge L4               #>=
  mrmovq 8(%rax),%rdx  #*(i+1)
  mrmovq (%rax),%rcx   #*i
  rrmovq %rdx,%r10     
  subq %rcx,%r10       #*(i+1)-*i
  jge L3               #>=
  rmmovq %rcx,8(%rax)  #swap
  rmmovq %rdx,(%rax)   #swap
  jmp L3
L4:
  irmovq $8,%rdx       #L4
  subq %rdx,%rsi       #end-1
L2:
  rrmovq %rsi,%r8
  subq %rdi,%r8        #data-end
  jle L6               #<
  rrmovq %rdi,%rax     #start->i
  jmp L5
L6:                    
  ret                  #L6
.pos 200
stack:

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-21 10:48
    关注

    检查L2标签是否正确定义,确保 jmp L2 能跳转到正确的地址。

    以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月21日

悬赏问题

  • ¥15 安霸cv22 + rtl8211f 千兆,udp传输丢包
  • ¥15 关于区块链和边缘环境搭建的相关问题
  • ¥15 windows远程桌面断卡重连软件卡顿问题
  • ¥30 Unity 实现扫描效果
  • ¥15 HbuilderX检测不到安卓模拟器
  • ¥15 这个main已经在filename.obj中定义是什么错 C语言
  • ¥15 关于#linux#的问题:exsi8.0系统 怎么更改web访问端口,不用80、443
  • ¥15 使用elementor设计样式
  • ¥15 谁能提供一个中文版的推销咨询网站连接?
  • ¥15 springboot项目程序启动报错