RobertG
Użytkownik
- Dołączył
- Styczeń 3, 2007
- Posty
- 391
Poniższy kod kompiluje pod Linuksem, kompilatorem NASM. Jego zadaniem jest zapis do tablicy cyfry 7, a następnie pobranie jej z tej tablicy i wyświetlenie na STDOUT. Chodzi mi o rozmiar myTable, tu jets on na tyle duży, ze 7ka powinna się zmieścić:
Dlaczego poniższy kod, w którym zapisuje dane do komórki, która nie istnieje też się kompiluje i też działa? W poniższym przykładzie myTable jest za mała przecież, żeby się do niej tak odwołać.
Czy ten kod, który zaprezentowałem niżej jest poprawny, czy też jest błędny a działa tylko przez przypadek? Jeżeli jest błędny to jakie narzędzia, z jakimi flagami mogą pomóc w analizie takich sytuacji? (valgrind pisze, iż jest OK, szukałem w manualu NASMa jakiejś opcji dającej więcej info o ostrzeżeniach ale też nie znalazłem)
pozdrawiam serdecznie
Kod:
section .text
global _start
%define mySize 10
_start:
mov esi, 10
mov ah, 7
mov [myTable+esi*4], ah
mov cl, [myTable+esi*4]
add cl, '0'
mov [stdoutBuff], cl
mov eax, 4
mov ebx, 1
lea ecx, [stdoutBuff]
mov edx, 1
int 0x80
mov eax, 1
int 0x80
section .bss
myTable resb mySize*mySize
section .data
stdoutBuff db 0
Kod:
rgawron@foo:/opt/asmy$ nasm -O3 -f elf sth.asm && ld -o hello sth.o && ./hello
7rgawron@foo:/opt/asmy$
Dlaczego poniższy kod, w którym zapisuje dane do komórki, która nie istnieje też się kompiluje i też działa? W poniższym przykładzie myTable jest za mała przecież, żeby się do niej tak odwołać.
Kod:
section .text
global _start
%define mySize 10
_start:
mov esi, 10
mov ah, 7
mov [myTable+esi*4], ah
mov cl, [myTable+esi*4]
add cl, '0'
mov [stdoutBuff], cl
mov eax, 4
mov ebx, 1
lea ecx, [stdoutBuff]
mov edx, 1
int 0x80
mov eax, 1
int 0x80
section .bss
myTable resb 1
section .data
stdoutBuff db 0
Kod:
rgawron@foo:/opt/asmy$ nasm -O3 -f elf sth.asm && ld -o hello sth.o && ./hello
7rgawron@foo:/opt/asmy$
Czy ten kod, który zaprezentowałem niżej jest poprawny, czy też jest błędny a działa tylko przez przypadek? Jeżeli jest błędny to jakie narzędzia, z jakimi flagami mogą pomóc w analizie takich sytuacji? (valgrind pisze, iż jest OK, szukałem w manualu NASMa jakiejś opcji dającej więcej info o ostrzeżeniach ale też nie znalazłem)
pozdrawiam serdecznie