Я начал изучать, как писать программы, используя язык программирования ассемблера NASM. Я написал эту простую программу, которая предлагает пользователю ввести два числа, а затем складывает два операнда вместе. Я получил его для компиляции без ошибок или предупреждений, но когда он запрашивает у пользователя два числа и начинает добавлять два числа, он выводит ошибку сегментации и программа завершается. Я знаю, что ошибка сегментации эквивалентна исключению нарушения прав чтения / записи в мире Win32. Но, потому что я не знаю, как отлаживать код NASM; Я не могу понять, что не так. Я подозреваю, что это связано с неверным указателем; но я не знаю Вот код ниже:
section .data
msg1: db 'Please Enter A Number: ', 0
length1: equ $ - msg1
msg2: db 'Please Enter A Second Number: ', 0
length2: equ $ - msg2
section .bss
operand1: resb 255
operand2: resb 255
answer: resb 255
section .text
global _start
_start:
; Print first message
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, length1
int 80h
; Now read value
mov eax, 3
mov ebx, 1
mov ecx, operand1
mov edx, 255
int 80h
; Print second message
mov eax, 4
mov ebx, 1
mov ecx, msg2
mov edx, length2
int 80h
; Now read second value
mov eax, 3
mov ebx, 1
mov ecx, operand2
mov edx, 255
int 80h
; Now add operand1 and operand2 and print answer
mov eax, 4
mov ebx, 1
xor ecx, ecx ; Make the ecx register 0
mov ecx, operand1
add ecx, operand2
mov edx, 510
int 80h