我正在尝试学习汇编语言,但我不确定自己是否走在正确的轨道上。我有一个汇编语言的程序,我需要转换为C。
addq %rsi, %rdi
addq %rdi, %rdx
movq %rdx, %rax
ret
尝试自己解决这个问题,我想出了一些基于
的内容long p1(long x, long y, long z)
{
x = x + y;
z = z + x;
long a = z;
return a;
}
无论我以哪种方式看待它,我觉得我很接近,但是当我进行观察时,我什么也得不到。寻找一些指导..谢谢!
答案 0 :(得分:3)
您的C代码看起来很好,据我所知,它与汇编代码完全相同。
您不应期望编译C代码将提供与示例完全相同的程序集。有许多不同的方法可以将C转换为汇编。
例如,如果我用gcc -O2
编译你的C代码(没有优化),我会得到更长的汇编,它将所有函数参数和变量存储到堆栈中。这是不必要的(并且速度较慢),但使调试器更容易。如果我使用 leaq (%rdi,%rsi), %rax
addq %rdx, %rax
ret
进行编译,我会得到
Import UIKit
class TestUpload: UIViewController {
@IBOutlet weak var progress: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
progress.text = "Hello"
// submit some jobs ….
// * I have omitted this code as I don't think it has a problem. * //
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 10 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
self.showProgress()
}
}
func showProgress() {
while Int(session.operationQueue.operationCount) > 0 {
sleep(10)
print(session.operationQueue.operationCount)
progress.text = String(session.operationQueue.operationCount)
}
let confirmUpload = UIAlertController(title: "Your Tasks have been performed.", message: "Congratulation!", preferredStyle: UIAlertControllerStyle.Alert)
confirmUpload.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in self.navigationController?.popViewControllerAnimated(true)}))
presentViewController(confirmUpload, animated: true, completion: nil)
}
在这里,编译器巧妙地使用lea
instruction在一条指令中进行添加和移动。