【发布时间】:2017-06-01 02:56:58
【问题描述】:
在Say Hello to Assembly - Part 3 的帖子中,作者想要在堆栈上打印一个字符串(转换后的整数)。 r12 包含字符串中的位数。
;;; Find length of string
mov rax, 1
mul r12
mov r12, 8 ; 8 times num digits to get len in bytes
mul r12
mov rdx, rax ; length of string int rdx
;;;; print sum
mov rax, SYS_WRITE
mov rdi, STD_OUT
mov rsi, rsp
syscall
我的问题是我们可以简化为:
;;; Find length of string
mov rax, 8 ; 8 times num digits
mul r12
mov rdx, rax ; length of string int rdx
或者我缺少作者的方法的一些微妙之处?
在我看来,他将 1 放入 rax 乘以 r12,然后将 8 放入 r12,然后再次相乘。我的方法看起来更干净,而且似乎有效。
【问题讨论】:
-
请注意,rdx 必须是 sys_WRITE 调用的 rsi 中字符串的长度。