inb的困惑

示例1:

# unsigned char fun (unsigned short int port)

# {      
#   unsigned char _v;
#

#   __asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (port));
#   return _v;
# }

这是at&t汇编格式
inb 是intel x86的一条指令
%w1表示宽度为w的1号占位符
%0表示0号占位符
inb %w1,%0 意思是将%w1读到%0,
嵌入式汇编除指令外有三部分(可选的),依次为
输出:"=a" (_v),_v0对应0号占位符,=表示只写,a表示最终从%eax / %ax / %al传送给_v

输入:"Nd" (port),port对应1号占位符号,N表示 0-255 之间的立即数 d表示将port传送给%edx / %dx / %d


示例2:

#inb : in BYTE 相当于  intel指令格式的 in.

#但是它指示出这是一个字节长度.

#比如:

#*AT&T: movb FOO,al 

#相当于:

#*Intel: mov al,byte ptr FOO 




在AT&T的汇编语言中,操作数的字长是由操作码助记符的最后一个字母决定的,后缀'b'、'w'、'l'分别表示操作数的字长为8比特(字节,byte),16比特(字,word)和32比特(长字,long),而Intel格式中操作数的字长是用“word ptr”或者“byte ptr”等前缀来表示的。



  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值