欢迎光临
我们一直在努力

HNU_计算机系统_第一次课后作业

HNU_计算机系统_第一次课后作业

智能230Xamazing_ice

仅供参考,请先独立思考

  • P33页,第3题
    • 汇编代码
      在这里插入图片描述
    • 以6×2为例,需要经过两次循环
      • 第一次:
        在这里插入图片描述
      • 第二次:
        在这里插入图片描述
  • P47页,第3题
    • movb $0xF, (%ebx)
      正确

    • movw %eax, (%esp)
      在这里插入图片描述
      movw %eax, (%esp)是指将寄存器eax中的值传入%esp的值所指向的内存,这里的问题是eax应该对应movl
      正确代码:movl %eax, (%esp)

    • movl (%eax), 4(%esp)
      在这里插入图片描述
      mov指令的操作数通常只能有一个内存操作数,另一个必须是寄存器或者立即数。也就是说,mov指令不允许同时有两个内存操作数。
      正确代码:先把(%eax)存入寄存器%ebx,再把寄存器%ebx传到4(%esp)
      movl (%eax), %ebx
      movl %ebx, 4(%esp)
      在这里插入图片描述

    • movb %al, %sl
      在这里插入图片描述
      问题在于SL并不是有效的寄存器名称,并不是所有寄存器的命名都是%E?X, %?H, %?L, 这里误将SL当做SI(源变址寄存器)的低八位,但事实上并没有这种寄存器。
      正确代码:我们换成一个合法的8位寄存器
      movb %al, %bl
      在这里插入图片描述

    • movl %eax, $0xFFFFFFFF
      在这里插入图片描述
      问题是movl指令的操作数顺序颠倒了,AT&T汇编代码是源操作数在前,目的操作数在后。
      正确代码:movl $0xFFFFFFFF, %eax
      在这里插入图片描述

    • movw %eax, %bx
      在这里插入图片描述
      在AT&T语法中,当使用movw时,源操作数必须是16位的。而eax是32位,因此直接使用movw %eax, %bx是不允许的,因为源操作数的尺寸大于指令要求的尺寸。汇编器因此报错,认为这是一个不支持的指令,因为操作数尺寸不匹配。
      正确代码:movw %ax, %bx
      在这里插入图片描述

    • movb %si, 8(%esp)
      在这里插入图片描述
      movb 是8位(byte)数据传输指令,源操作数 %si 是16位寄存器,8位指令无法操作16位寄存器。
      正确代码:movw %si, 8(%esp)
      在这里插入图片描述

  • P48页,第6题
    在这里插入图片描述
  • P48页,第7题
    在这里插入图片描述
  • 赞(0)
    未经允许不得转载:171主机测评 » HNU_计算机系统_第一次课后作业
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址