在汇编中比较字符串而不调用函数?

Compare string without calling function in assembly?

假设我有两个字符串,我想比较字符串但不想为 truefalse:

调用另一个函数
mov rsi, 0x4141414141414141
mov rdi, 0x6161616161616161
cmp rsi, rdi
// if true do here
// otherwise do here
// jmp back_up_to_cmp rsi, rdi

我遇到的问题是,我无法为 true 或 false 调用函数。那么,到底有没有达到我的预期呢?

正如@fuz 所指出的,我可以使用相对跳转来实现我想要的:

工作完整代码:

SECTION .text
global main

main:
mov rax, 1
mov rsi, 0x203e7475706e49
push rsi
mov rsi, rsp
mov rdx, 7
syscall

mov rax, 0
mov rdi, 0
mov rsi, rsp
mov rdx, 256
syscall

mov rax, 1
mov rsi, rsp

xor rdx, rdx
cmp byte [rsi + rdx], 0x0a
jz 0xc
inc rdx
jmp -0xe

syscall

mov rax, 60
syscall

我查看了我的 cmp 所在的位置,计算了差异并使用 jmp 跳转到该位置:

0x0000000000001130 <+0>:     mov    [=11=]x1,%eax
0x0000000000001135 <+5>:     movabs [=11=]x203e7475706e49,%rsi
0x000000000000113f <+15>:    push   %rsi
0x0000000000001140 <+16>:    mov    %rsp,%rsi
0x0000000000001143 <+19>:    mov    [=11=]x7,%edx
0x0000000000001148 <+24>:    syscall 
0x000000000000114a <+26>:    mov    [=11=]x0,%eax
0x000000000000114f <+31>:    mov    [=11=]x0,%edi
0x0000000000001154 <+36>:    mov    %rsp,%rsi
0x0000000000001157 <+39>:    mov    [=11=]x100,%edx
0x000000000000115c <+44>:    syscall 
0x000000000000115e <+46>:    mov    [=11=]x1,%eax
0x0000000000001163 <+51>:    mov    %rsp,%rsi
0x0000000000001166 <+54>:    xor    %rdx,%rdx
0x0000000000001169 <+57>:    cmpb   [=11=]xa,(%rsi,%rdx,1)
0x000000000000116d <+61>:    je     0x117b <main+75>
0x0000000000001173 <+67>:    inc    %rdx
0x0000000000001176 <+70>:    jmpq   0x1169 <main+57>
0x000000000000117b <+75>:    syscall 
0x000000000000117d <+77>:    mov    [=11=]x3c,%eax
0x0000000000001182 <+82>:    syscall 
0x0000000000001184 <+84>:    nopw   %cs:0x0(%rax,%rax,1)
0x000000000000118e <+94>:    xchg   %ax,%ax

所以没有更多的功能:)谢谢@fuz