私は、特定のプログラムのすべての値を合計するおもちゃの NASM プログラムに取り組んでいます。すべてがどのように機能するかを把握するためにプログラムを作成するときに、NASM をいじっています。
私のプログラムのこれまでのところ、「Works」という一連の出力を配置したので、エラーの場所を絞り込むことができます。
現在、「Work」のプリントアウトが 5 枚あると予想していますが、4 枚しか表示されていません。どうやら、下のコードOutput:
は印刷に失敗しているようですが、私の人生ではその理由を理解できません。
segment .data
;studentInfo: db 10,'Program by Raphael Stein', 10, '6079652', 10, 10 ;
;infoLen: equ $-studentInfo
NUM_ROWS: equ 5
NUM_COLUMNS: equ 5
NUM_ROW_BYTES: equ 10
;Default matrix
matrix: dw 5, 4, 9, 7, 2
dw 1, 4, 6, 8, 7
dw 9, 9, 2, 3, 7
dw 6, 5, 8, 3, 4
dw 1, 2, 8, 2, 6
matrixLen: equ $-matrix
sum: db "The sum of the last column is: ", 10
;FOR TESTING
works: db 'Works!', 10
worksLen: equ $-works
segment .bss
counter resb 1
segment .text
global main
main:
;------------------------------------------------------------------------
mov eax, 4 ; system call 4
mov ebx, 1 ; standard output
mov ecx, works ; Works! 1
mov edx, worksLen
int 0x80
;-------------------------------------------------------------------------
;mov CX, NUM_ROWS ;Works!
mov ECX, counter
sub AX, AX
sub EBX, EBX
mov ESI, NUM_COLUMNS-1
;------------------------------------------------------------------------
mov eax, 4 ; system call 4
mov ebx, 1 ; standard output
mov ecx, works ; Works! 2
mov edx, worksLen
int 0x80
;------------------------------------------------------------------------
sum_loop:
add EAX, [matrix + EBX + ESI*2]
add EBX, NUM_ROW_BYTES
add ECX, 1
cmp EAX,ECX
mov esi, eax
jge Output
LOOP sum_loop
;------------------------------------------------------------------------
mov eax, 4 ; system call 4
mov ebx, 1 ; standard output
mov ecx, works ; Works! 3
mov edx, worksLen
int 0x80
;-------------------------------------------------------------------------
Output:
mov eax, 4
mov ebx, 1
mov ecx, works
mov edx, worksLen
int 0x80
;------------------------------------------------------------------------
mov eax, 4 ; system call 4
mov ebx, 1 ; standard output
mov ecx, works ; Works! 4
mov edx, worksLen
int 0x80
;-------------------------------------------------------------------------
EXIT:
mov eax, 1
xor ebx, ebx
int 0x80