文章
24
粉丝
0
获赞
0
访问
2.1k
1) 跳转指令、寻址方式及jmp目标地址计算
jmp、第 10 条jle、第 14 条jl。这些跳转指令采用的是相对寻址方式,即通过指令中给出的相对偏移量来计算跳转目标地址。jmp的跳转目标地址计算过程:指令jmp所在虚拟地址为00401008h,指令中的偏移量为21h(由机器指令EB 21可知,EB是jmp的操作码,21是相对偏移量)。因为是相对寻址,且jmp指令执行时,下一条指令的地址是00401008h + 2h = 0040100Ah(jmp指令长度为 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 = 0,OF = 0,ZF = 0,所以(0 != 0) || 0 = 0,不发生跳转。(3) 指令功能、寄存器内容、寻址方式及编址方式
shll $2, %eax:将eax寄存器中的值逻辑左移 2 位。因为int占 4 字节,左移 2 位相当于乘以4(2^2 = 4),这里是将数组下标i转换为相对于数组起始地址的字节偏移量(因为每个元素占 4 字节)。addl $0804A010h, %eax:将数组A的起始地址0804A010h与eax中的偏移量相加,得到数组元素A[i]的地址。movl (%eax), %ecx:将eax所指向内存地址中的值(即A[i]的值)加载到ecx寄存器中...
登录后发布评论
暂无评论,来抢沙发