Assembly x86 EDI,SIL和DL寄存器的功能是什么?

时间:2013-06-20 08:37:09

标签: assembly x86

lk:
movl %edi , %r9d
jmp .L8

L8:
movzbl %sil , %eax
movzbl %dl , %ecx
leal -1(%rcx) , %r8d
cmpl %r8d, %eax
jl .L4 //if (%eax <%r8d) goto .L4
cltq // extend %eax int %rax
movl %esi, %eax
cmovle %edx, %eax // if (ecran(%rax)<=%dil) %eax=%edx
ret

main:
...
movzbl %bl,%eax
movsbl clavier(%rax), %ebp
movsbl le(%rip),%edx
movl $0, %esi
movl %ebl, %edi
call lk
movzbl %al, %esi
...
ret

%edi%sil以及%dl在函数lk中的含义以及它们的类型是什么?

1 个答案:

答案 0 :(得分:4)

edi是一个寄存器,通常用于保存字符串操作的目的地(scas等)。 但与任何其他通用寄存器一样,可用于保存任何其他数据。

一般来说,忘记汇编中的“类型”:汇编不是类型语言,或者更好的是任何数据都只是字节。它们可以有不同的大小,但这就是全部:寄存器可以保存任何x位(本例中为32位,或4位)数据,并且无法判断它是一堆字符,整数还是指针

(我假设你使用的是GNU汇编程序;在这种情况下,%some几乎总是一个寄存器)

哦,你对寄存器的不同部分有不同的名称:例如%dl是“d”寄存器的低8位(edx on 32位机器,64位的rdx寄存器,%sil代表esi寄存器的低8位。

您可以在优秀的英特尔装配手册中找到所有这些信息。 在熟练之前,有很多人要研究这个问题。至少,你应该开始reading wikipedia。然后,我建议您查看一些教程,阅读英特尔手册,study calling conventions,...