关于xlat指令

ioriliao9 2010-09-24 11:31:47
这一段是delphi的代码,在其下面的那一段是这段delphi代码的反汇编代码,执行了xlat指令后应该al的值为什么为0呢?

var
Form1: TForm1;
arr:Array[0..9] of integer=($30,$31,$32,$33,$34,$35,$36,$37,$38,$39);
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
s:char;
begin

ShowMessage('pushf、popf、lahf、sahf');
asm
lea ebx,arr;
mov al,5;
xlat;
mov s,al;
end;
ShowMessage(s);
end;


004537C4  /.  55            push    ebp
004537C5 |. 8BEC mov ebp, esp
004537C7 |. 83C4 F8 add esp, -8
004537CA |. 33C9 xor ecx, ecx
004537CC |. 894D F8 mov dword ptr [ebp-8], ecx
004537CF |. 33C0 xor eax, eax
004537D1 |. 55 push ebp
004537D2 |. 68 1C384500 push 0045381C
004537D7 |. 64:FF30 push dword ptr fs:[eax]
004537DA |. 64:8920 mov dword ptr fs:[eax], esp
004537DD |. B8 30384500 mov eax, 00453830 ; pushf、popf、lahf、sahf
004537E2 |. E8 853BFDFF call 0042736C
004537E7 |. 8D1D C04D4500 lea ebx, dword ptr [454DC0]
004537ED |. B0 05 mov al, 5
004537EF |. D7 xlat byte ptr [ebx+al]
004537F0 |. 8845 FF mov byte ptr [ebp-1], al
004537F3 |. 8D45 F8 lea eax, dword ptr [ebp-8]
004537F6 |. 8A55 FF mov dl, byte ptr [ebp-1]
004537F9 |. E8 3608FBFF call 00404034
004537FE |. 8B45 F8 mov eax, dword ptr [ebp-8]
00453801 |. E8 663BFDFF call 0042736C
00453806 |. 33C0 xor eax, eax
00453808 |. 5A pop edx
00453809 |. 59 pop ecx
0045380A |. 59 pop ecx
0045380B |. 64:8910 mov dword ptr fs:[eax], edx
0045380E |. 68 23384500 push 00453823
00453813 |> 8D45 F8 lea eax, dword ptr [ebp-8]
00453816 |. E8 3106FBFF call 00403E4C
0045381B \. C3 retn


...全文
385 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ioriliao9 2010-09-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 delphiguy 的回复:]
是等价的,但是你原来定义的是integer。
[/Quote]
呵呵。。。不好意思哦,原来是我自己搞错了。。。谢谢前辈!
  • 打赏
  • 举报
回复
是等价的,但是你原来定义的是integer。
ioriliao9 2010-09-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 delphiguy 的回复:]
为什么呢?因为指令就是这样定义的,查的是一个最多256个元素的字节数组。
[/Quote]
char类型不等价于byte类型的?
  • 打赏
  • 举报
回复
为什么呢?因为指令就是这样定义的,查的是一个最多256个元素的字节数组。
ioriliao9 2010-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 delphiguy 的回复:]
arr:Array[0..9] of BYTE=($30,$31,$32,$33,$34,$35,$36,$37,$38,$39);
[/Quote]
变为btye类型还真的可以了耶,请问前辈这是为什么呢?
  • 打赏
  • 举报
回复
arr:Array[0..9] of BYTE=($30,$31,$32,$33,$34,$35,$36,$37,$38,$39);

shzhfu 2010-09-24
  • 打赏
  • 举报
回复
从汇编语言的角度看应该是 $35

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧