首先,我想首先说我已经阅读this,this和this question。然而,就这些问题提供的答案都没有足够/足够详细的信息来回答我的问题。而且,他们都是4-6岁,这使他们过时了。话虽如此,我在这里开了一个新问题。
我正在尝试制作一个简单的程序,在Linux 32位汇编中使用NASM语法显示1-4个矩阵,我已经制作了一个应该打印简单1x1矩阵的程序。
section .data
msg1: db 'output:', 10
msg1len: equ $-msg1
endmsg: db 10
m1r1: db '5'
m2r1: db '1', '4'
m2r2: db '2', '6'
m3r1: db '8', '3', '4'
m3r2: db '9', '2', '1'
m3r3: db '1', '5', '6'
m4r1: db '6', '3', '1', '7'
m4r2: db '1', '9', '8', '4'
m4r3: db '5', '0', '1', '2'
m4r4: db '2', '7', '1', '0'
section .bss
output1: resb 5
output2: resb 7*2
output3: resb 9*3
output4: resb 11*4
section .text
global _start
_start:
mov eax, 1
call printMatrix
_exit:
mov eax, 0
mov ebx, 1
int 80h
;description:
; displays a visual representation of
; a matrix from size 1 through 4
;parameters:
; eax - matrix size
printMatrix:
push eax
push ebx
push ecx
push edx
push esi
cmp eax, 1
je .printMatrix1
cmp eax, 2
je .printMatrix2
cmp eax, 3
je .printMatrix3
cmp eax, 4
je .printMatrix4
.printMatrix1:
mov eax, '[ '
mov [output1], eax
mov eax, m1r1
mov [output1 + 2], eax
mov eax, ' '
mov [output1 + 3], eax
mov eax, ']'
mov [output1 + 4], eax
mov eax, 4
mov ebx, 1
mov ecx, [output1]
mov edx, 5
jmp .exit
.printMatrix2:
jmp .exit
.printMatrix3:
jmp .exit
.printMatrix4:
jmp .exit
.exit:
pop esi
pop edx
pop ecx
pop ebx
pop eax
ret
printEndl:
push eax
push ebx
push ecx
push edx
mov eax, 4
mov ebx, 1
mov ecx, endmsg
mov edx, 1
int 80h
pop edx
pop ecx
pop ebx
pop eax
ret
然而,当我编译通过:
nasm -f elf32 matrix.asm
并使用以下链接:
ld -m elf_i386 -s -o matrix matrix.o
我没有收到任何错误/警告,但是当我使用./matrix
运行程序时出现segmentation fault (core dumped)
错误。
现在我必须注意this question为什么是分段错误及其通常由什么引起的问题提供了一个相当好的定义,但有点不清楚。我寻求的是: