Assembly / Nasm - Segmentierungsfehler (Core Dumped) Fehler

Ich bin sehr neu in NASM und ich versuche, ein MASM-Beispiel online auszuführen, das ich gefunden habe, aber es hat mir schwergetan, auf NASM zu übersetzen.

It kompiliert und generiert eine Ausgabedatei korrekt, aber wenn ich versuche, sie auszuführen, gibt es einen Segmentierungsfehler (Core Dumped Error), von dem ich keine Ahnung habe, was es ist. Betriebssystem ist Ubuntu und versucht das Kompilieren unter:

nasm -f elf binario.asm
ld -m elf_i386 binario.o io.o -o binario

Hier ist der Code:

%include "io.mac"

.DATA
PROMPT_1  DB  0DH,0AH,'Enter the first binary number ( max 8-digits ) : 

Danke für die Hilfe

PROMPT_2 DB 0DH,0AH,'Enter the second binary number ( max 8-digits ) :

Danke für die Hilfe

PROMPT_3 DB 0DH,0AH,'The SUM of given binary numbers in binary form is :

Danke für die Hilfe

ILLEGAL DB 0DH,0AH,'Illegal character. Try again.

Danke für die Hilfe

.CODE .STARTUP JMP start2 ; jump to label @START_2 start1: ; jump label MOV DX, [ILLEGAL] ; load and display the string ILLEGAL MOV AH, 9 INT 21H start2: ; jump label XOR BX, BX ; clear BX MOV DX, [PROMPT_1] ; load and display the string PROMPT_1 MOV AH, 9 INT 21H MOV CX, 8 ; initialize loop counter MOV AH, 1 ; set input function loop1: ; loop label INT 21H ; read a character CMP AL, 0DH ; compare AL with CR JNE skip1 ; jump to label @SKIP_1 if AL!=0DH CMP CX, 8 ; compare CX with 8 JE start1 ; jump to label @START_1 if CX=8 JMP exitloop1 ; jump to label @EXIT_LOOP_1 skip1: ; jump label AND AL, 0FH ; convert ascii into decimal code SHL BL, 1 ; shift BL towards left by 1 position OR BL, AL ; set the LSB of BL with LASB of AL LOOP loop1 ; jump to label @LOOP_1 if CX!=0 exitloop1: ; jump label MOV DX, [PROMPT_2] ; load and display the string PROMPT_2 MOV AH, 9 INT 21H MOV CX, 8 ; initialize loop counter MOV AH, 1 ; set input function loop2: ; loop label INT 21H ; read a character CMP AL, 0DH ; compare AL with CR JNE skip2 ; jump to label @SKIP_2 if AL!=0DH CMP CX, 8 ; compare CX with 8 JE start2 ; jump to label @START_2 if CX=8 JMP exitloop2 ; jump to label @EXIT_LOOP_2 skip2: ; jump label AND AL, 0FH ; convert ascii into decimal code SHL BH, 1 ; shift BH towards left by 1 position OR BH, AL ; set the LSB of BH with LASB of AL LOOP loop2 ; jump to label @LOOP_2 if CX!=0 exitloop2: ; jump label MOV DX, [PROMPT_3] ; load and display the string PROMPT_3 MOV AH, 9 INT 21H ADD BL, BH ; add BL and BH JNC skip ; jump to label @SKIP if CF=1 MOV AH, 2 ; print the digit 1 i.e. carry MOV DL, 31H INT 21H skip: ; jump label MOV CX, 8 ; initialize loop counter MOV AH, 2 ; set output function loop3: ; loop label SHL BL, 1 ; shift BL towards left by 1 position JC one ; jump to label @ONE if CF=1 MOV DL, 30H ; set DL=0 JMP display ; jump to label @DISPLAY one: ; jump label MOV DL, 31H ; set DL=1 display: ; jump label INT 21H ; print the character LOOP loop3 ; jump to label @LOOP_3 if CX!=0 MOV AH, 4CH ; return control to DOS INT 21H done: .EXIT

Danke für die Hilfe

Antworten auf die Frage(2)

Ihre Antwort auf die Frage