Segmentation fault 简单的NASM程序输出数组中的第一个数字会产生分段错误
我正在尝试制作一个非常简单的NASM程序,它将输出数组中的第一个值 当我运行它时,我得到一个Segmentation fault 简单的NASM程序输出数组中的第一个数字会产生分段错误,segmentation-fault,nasm,Segmentation Fault,Nasm,我正在尝试制作一个非常简单的NASM程序,它将输出数组中的第一个值 当我运行它时,我得到一个分段错误。我不明白为什么。数组中的值是一个字节,我输入edx寄存器的长度是1。为什么会有错误 segment .data array: db 2, 9, 6, 7, 1, 4 segment .bss segment .text global main main: mov eax, 4 mov ebx, 1 mov ecx, [array] mov e
分段错误
。我不明白为什么。数组中的值是一个字节,我输入edx
寄存器的长度是1
。为什么会有错误
segment .data
array: db 2, 9, 6, 7, 1, 4
segment .bss
segment .text
global main
main:
mov eax, 4
mov ebx, 1
mov ecx, [array]
mov edx, 1
int 0x80
您将遇到seg故障,因为您没有正确结束程序。它正在跑进无人区
mov eax, 1
xor ebx, ebx
int 80H
是退出程序的正确方式。而且,您的打印机没有打印您期望的内容。数组中的这些数字不是ASCII码,您需要在代码中转换为ASCII码,或者只是用引号括起来
array db "2", "9", "6", "7", "1", "4"
另外,如果sys_write期望和address不是一个值,请删除数组周围的括号
*编辑*
%define sys_exit 1
%define sys_write 4
%define stdout 1
section .data
array db "2", "9", "6", "7", "1", "4"
section .text
global main
main:
mov eax, sys_write
mov ebx, stdout
mov ecx, array
mov edx, 1
int 80H
mov eax, sys_exit
xor ebx, ebx
int 80h
它起作用了!但它会打印出所有的值。如何只打印一个(即第一个)?