【发布时间】:2016-05-29 13:36:58
【问题描述】:
我是一个初学者,正在编写汇编程序以使用以下代码打印从 1 到 9 的数字:
section .text
global _start
_start:
mov ecx,10
mov eax, '1'
l1:
mov [num], eax
mov eax, 4
mov ebx, 1
push ecx
mov ecx, num
mov edx, 1
int 0x80
mov eax, [num]
sub eax, '0'
inc eax
add eax, '0'
pop ecx
loop l1
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .bss
num resb 1
这里我们有以下三个语句:
- mov [num], eax
- mov ecx, num
- mov eax, [num]
我想知道为什么我们应该使用mov ecx,num 而不是mov ecx,[num]
【问题讨论】:
-
我写了一份x86 addressing modes 的指南,包括介绍 NASM 和 MASM 在这一语法方面的区别:
mov ecx, num与mov ecx, OFFSET num。这是试图写出一个答案,像这样的 Q 可以作为重复链接。