gpt4 book ai didi

assembly - 是否可以先在没有 `cmp` 的情况下在汇编中使用条件跳转?

转载 作者:行者123 更新时间:2023-12-01 08:48:55 27 4
gpt4 key购买 nike

所以我正在阅读一些 assembly source code出于学习目的,遇到了一些非常奇怪的事情(或者我可能只是一个新手):

.ver:
mov al, [redoxfs.header + Header.version + bx]
mov ah, [.version + bx]
cmp al, ah
jne .ver_err
inc bx
jl .ver

所以在这个子标签中我们有两条跳转指令。

但是,关于最后一条跳转指令 jl .如果我错了,请纠正我,但不应该有 cmp在跳转之前,因为它是有条件的?

我最初认为它是基于 cmp al, ah ,但是 jne如果不相等则跳转。

我错过了什么吗?

最佳答案

考虑这 3 种指令:

  • 所有条件跳转(如 jnejl 等等)都将根据 FLAGS 寄存器中一位或多位的当前设置进行跳转。
  • 除了 cmp指令,还有更多指令会修改 FLAGS 寄存器中的某些位(例如 testadd 等等)。
  • 然后有很多指令不会修改任何标志(例如 movpush 等等)。

  • 例子
    cmp al, ah
    jne .ver_err
    jne .ver_err基于 设置的标志位跳转最近的标志修改指令这是 cmp al, ah在这种情况下。
    inc bx
    jl .ver
    jl .ver基于 设置的标志位跳转最近的标志修改指令这是 inc bx在这种情况下。
    inc bx
    lea si, [si+1]
    jl .ver

    由于这被插入 lea指令不修改任何标志, jl .ver指令仍然根据 inc bx 设置的标志位跳转指令,因为那仍然是 最近的标志修改指令 .

    关于assembly - 是否可以先在没有 `cmp` 的情况下在汇编中使用条件跳转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48139412/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com