gpt4 book ai didi

linux - 我正在 linux 上学习汇编,[] 符号让我感到困惑。 (NASM)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:17 27 4
gpt4 key购买 nike

我正在使用以下代码:

section .text
global _start
_start:
mov ebx, testing
mov [ebx], byte 0x4A
add ebx, byte 1
mov [ebx], byte 0x4B
add ebx, byte 1
mov [ebx], byte 0x4C

;sets var1 as '*'
mov eax, 0x2A
mov [var1], eax

;sets var2 as 'N'
mov eax, 0x4E
mov [var2], eax

;sets var3 = var2
mov eax, [var2]
mov [var3], eax

;Prints var1
mov eax, 4
mov ebx, 1
mov ecx, var1
mov edx, 1
int 0x80

;Jumps a line
mov eax, 4
mov ebx, 1
mov ecx, line_break
mov edx, 2
int 0x80

;Prints var2
mov eax, 4
mov ebx, 1
mov ecx, var2
mov edx, 1
int 0x80

;Jumps a line
mov eax, 4
mov ebx, 1
mov ecx, line_break
mov edx, 2
int 0x80

;Prints var3
mov eax, 4
mov ebx, 1
mov ecx, var3
mov edx, 1
int 0x80

;Jumps a line
mov eax, 4
mov ebx, 1
mov ecx, line_break
mov edx, 2
int 0x80

;Prints variable
mov eax, 4
mov ebx, 1
mov ecx, variable
mov edx, 3
int 0x80

;Jumps a line
mov eax, 4
mov ebx, 1
mov ecx, line_break
mov edx, 2
int 0x80

;Prints testing
mov eax, 4
mov ebx, 1
mov ecx, testing
mov edx, 3
int 0x80

;Jumps a line
mov eax, 4
mov ebx, 1
mov ecx, line_break
mov edx, 2
int 0x80


;Finishes program
mov eax, 1
mov ebx, 1
int 0x80

section .data
variable times 3 db 0x2A
line_break dw 0x0D0A

section .bss
testing resb 3
var1 resb 1
var2 resb 1
var3 resb 1

它打印出:

*
N
N
***
JKL

我不明白的是:为什么在第一行“mov ebx, testing”中没有围绕“testing”的方括号以及为什么这些方括号出现在“mov eax, [var2]”行的 [var2] 中”。这个符号究竟是如何工作的? [var2]不应该是var2的有效地址吗?

最佳答案

标识符周围的括号表示该值应该用作指针。所以没有括号:

mov ebx, testing

testing地址移动到eax寄存器中,其中

mov eax, [var2]

将 var2 指向的 移动到 eax 中。

关于linux - 我正在 linux 上学习汇编,[] 符号让我感到困惑。 (NASM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com