请问这些代码都是32位汇编代码吗??为什么传送指令和转移指令后面都加了个l???难道这就是32位汇编吗?

2025-01-03 00:05:31
推荐回答(1个)
回答1:

这是AT&T风格的汇编代码。这与Intel风格的写法有很明显的差别,诸如:1操作数顺序刚好相反,2指令名后加后缀,3寄存器名前加'%',4立即数前加'$',5内存操作数的寻址方式表达方式不同,6伪代码前加点等。总体上应该说AT&T风格比Intel风格要更规则、严密,写起来也稍繁琐一些。
LZ给的代码都只有'l'一种指令后缀,也就是说这都是32位的操作。而对应8位和16位操作的指令后缀分别是'b'和'w'。
按cdecl调用规则来看,_whthere标号处的代码应该是一个whthere()函数,功能是调用puts()输出"gongji cheng gong\0"串后,直接调用函数_exit(0)退出进程。是很简单的函数代码,并没有什么中断处理程序应该有的特征。