所以,我试图只编写逻辑并制作工作代码,但是当我去运行我的代码以检查我到目前为止的内容时,所有变量都是它们的初始化值。我什至使前两行执行的只是我将一个数字放入寄存器然后将其放入一个我再也不会触摸的变量中 - 变量仍然具有它的声明值。
这是代码:
section .data
TRUE equ 1
FALSE equ 0
EXIT_SUCCESS equ 0 ; successful operation
NOSUCCESS equ 1 ; unsuccessful operation
LF equ 10
NULL equ 0
ESC equ 27
SYS_exit equ 60 ; system call code for terminate
; -----
; Variables and constants.
STR_LENGTH equ 15 ; digits in string, including NULL
newLine db LF, NULL
; -----
; Misc. string definitions.
msg dd 0
; **********************************************************************************
extern printf
section .text
global main
main:
mov eax, 10
mov [msg], eax
; Done
last:
mov rax, SYS_exit ; The system call for exit (sys_exit)
mov rdi, EXIT_SUCCESS
syscall
有什么我做错了吗?关于使用 global main 而不是 global _start 进行编码,我应该知道些什么?谢谢!
编辑:我正在使用这些命令进行编译:
yasm -Worphan-labels -g dwarf2 -f elf64 as1.asm -l as1.lst
g++ -g -no-pie -o as1 as1.o -lm
编辑2:
另外值得注意的是,当使用 XMM0 寄存器时,DID 值发生了一次变化:
movss xmm0, dword [Num]
addss xmm0, dword [One] ; + 1.0
movss dword [Ans], xmm0
Ans 可以为 1。它的声明方式与 msg 相同,只是它有一个小数点:
Ans dd 0.0
我认为这是用于浮点运算的。
编辑 3:
这也行不通:
;Declared beforehand:
len dd 60
racism dd 0
mov eax, dword [len]
mov [racism], eax