文章

24

粉丝

0

获赞

0

访问

2.1k

头像
2025 年 9 月第 1 次 408 月考试卷 - 第43题回答
计算机组成原理
发布于2025年9月22日 23:14
阅读数 122

1) 跳转指令、寻址方式及jmp目标地址计算

  • 跳转指令及寻址方式:
    • 可能使程序发生跳转的指令有第 3 条jmp、第 10 条jle、第 14 条jl。这些跳转指令采用的是相对寻址方式,即通过指令中给出的相对偏移量来计算跳转目标地址。
  • 第 3 条指令jmp的跳转目标地址计算过程:指令jmp所在虚拟地址为00401008h,指令中的偏移量为21h(由机器指令EB 21可知,EBjmp的操作码,21是相对偏移量)。因为是相对寻址,且jmp指令执行时,下一条指令的地址是00401008h + 2h = 0040100Ahjmp指令长度为 2 字节)。所以跳转目标地址为0040100Ah + 21h = 00401031h,与汇编指令中给出的jmp 00401031h一致。

(2) 标志位及跳转逻辑表达式

  • 标志位状态:
    • sum = 150,是正数,所以符号标志SF = 0(符号标志SF表示结果的符号,正数时SF = 0,负数时SF = 1)。
    • 计算过程中没有溢出(150在 32 位带符号整数表示范围内,且运算未导致溢出),所以溢出标志OF = 0
    • sum不等于0,所以零标志ZF = 0
  • 跳转的逻辑表达式:jle指令表示 “有符号数小于等于时转移”,其判断的逻辑表达式为:(SF != OF) || ZF。当该表达式为真时,发生跳转;为假时,不跳转。此时SF = 0OF = 0ZF = 0,所以(0 != 0) || 0 = 0,不发生跳转。

(3) 指令功能、寄存器内容、寻址方式及编址方式

  • 指令功能:
    • 第 5 条指令shll $2, %eax:将eax寄存器中的值逻辑左移 2 位。因为int占 4 字节,左移 2 位相当于乘以42^2 = 4),这里是将数组下标i转换为相对于数组起始地址的字节偏移量(因为每个元素占 4 字节)。
    • 第 6 条指令addl $0804A010h, %eax:将数组A的起始地址0804A010heax中的偏移量相加,得到数组元素A[i]的地址。
    • 第 7 条指令movl (%eax), %ecx:将eax所指向内存地址中的值(即A[i]的值)加载到ecx寄存器中...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发