1

所以,我试图只编写逻辑并制作工作代码,但是当我去运行我的代码以检查我到目前为止的内容时,所有变量都是它们的初始化值。我什至使前两行执行的只是我将一个数字放入寄存器然后将其放入一个我再也不会触摸的变量中 - 变量仍然具有它的声明值。

这是代码:

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
4

0 回答 0