shll $16,%dx 是什么意思
shll $16,%dx 指令是什么意思,网上说:把dx移到edx的高16位, 这个指令中根本没有出现edx寄存器,这该怎么理解 shll k,DD = D << k
左移(同sall) 回复 2# humjb_1983
dx为8位寄存器,如果右移动16位后结果仍然放到dx中,dx恐怕不能放下移位后的结果
palm008 发表于 2014-04-22 13:20 static/image/common/back.gif
回复 2# humjb_1983
dx为8位寄存器,如果右移动16位后结果仍然放到dx中,dx恐怕不能放下移位后的结果
不对吧,dx是16位的寄存器,edx是32位的,dx中的数据左移16位后,存入的应该是edx寄存器。 回复 4# humjb_1983
dx多少位,和具体的处理器有关,我的疑问是指令 shll $16,%dx移位后的结果放在那里,dx肯定是放不下结果了,如果是放在edx中,是什么原理呢?怎么不选择eax呢?
个人理解edx和dx实际物理上是同一个寄存器吧~,只是取的范围不同 humjb_1983 发表于 2014-04-
本帖最后由 l4rmbr 于 2014-04-22 16:52 编辑
回复 1# palm008
这条指令哪里来的呢?
shll中的最后l要求参数应该是个字长,即%edx,否则会报错的。
比如:
/* test.c */
int main(void)
{
__asm__("movw $ff00,%%dx\t\n"
"shll $16,%%dx\t\n"
:::);
return 0;
}然后gcc test.c马上报错:
Error: incorrect register `%dx' used with `l' suffix
呵呵,这个有啥问题?正是说明同一个寄存器吧~ 回复 9# humjb_1983
hmm,他想表达的意思没错吧。不过我怀疑那条指令通不过编译,所以想问问是哪来的。
页:
[1]