Assembly 如何使用compare+;日本脑炎?
我正在写一段代码,计算一个字符串中有多少个单词。如何使用je增加寄存器 例如:Assembly 如何使用compare+;日本脑炎?,assembly,x86,predicate,Assembly,X86,Predicate,我正在写一段代码,计算一个字符串中有多少个单词。如何使用je增加寄存器 例如: cmp a[bx+1],00h je inc cx 是一个条件跳转。与ARM不同,x86不能基于任意条件直接断言另一条指令。没有任何一条机器指令可以像jeinc-cx或ARM-styleinceq-cx那样执行任何操作 相反,您需要通过在其他指令上有条件地分支来构建逻辑 如果要在两个数字比较相等时增加寄存器,请尝试以下操作: cmp a[bx + 1], 00h ; compare number
cmp a[bx+1],00h
je inc cx
是一个条件跳转。与ARM不同,x86不能基于任意条件直接断言另一条指令。没有任何一条机器指令可以像jeinc-cx
或ARM-styleinceq-cx
那样执行任何操作
相反,您需要通过在其他指令上有条件地分支来构建逻辑
如果要在两个数字比较相等时增加寄存器,请尝试以下操作:
cmp a[bx + 1], 00h ; compare numbers
jne .noteq ; if they are different, skip
inc cx ; the increment
.noteq:
如果您有386兼容的CPU,则可以使用无分支选项。它需要一个额外的寄存器:
xor ax, ax ; clear register
cmp a[bx + 1], 00h ; compare numbers
sete al ; set al = 1 if the numbers are equal
add cx, ax ; increment cx if numbers are equal
与PPro兼容的CPU具有和。与(386)、(8086)和(8086)一起,这些是x86唯一的条件检查指令。(条件位存储在标志寄存器中,您可以直接访问它们,但通常不太方便。)是一种条件跳转。与ARM不同,x86不能基于任意条件直接断言另一条指令。没有任何一条机器指令可以像
jeinc-cx
或ARM-styleinceq-cx
那样执行任何操作
相反,您需要通过在其他指令上有条件地分支来构建逻辑
如果要在两个数字比较相等时增加寄存器,请尝试以下操作:
cmp a[bx + 1], 00h ; compare numbers
jne .noteq ; if they are different, skip
inc cx ; the increment
.noteq:
如果您有386兼容的CPU,则可以使用无分支选项。它需要一个额外的寄存器:
xor ax, ax ; clear register
cmp a[bx + 1], 00h ; compare numbers
sete al ; set al = 1 if the numbers are equal
add cx, ax ; increment cx if numbers are equal
与PPro兼容的CPU具有和。与(386)、(8086)和(8086)一起,这些是x86唯一的条件检查指令。(条件位存储在标志寄存器中,您可以直接访问它们,但通常不太方便。)