我正在开发一个玩具NASM程序,它将在特定程序中添加所有值。 我现在正在玩NASM,因为我构建我的程序以了解一切是如何工作的。
在我的程序中,我已经放置了一系列输出,说“工作”,所以我可以缩小错误的位置。
目前我希望看到五个“工作”的打印输出,但我只看到四个。显然,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
答案 0 :(得分:1)
我在这里看到一些问题。没有特别的顺序:
良好的开端和主动性。继续练习。