Ĺadny brzuch
Assemblera się dopiero uczę, więc gdybym czegoś ważnego nie powiedział to nie bijcie. Programuję w Asemblerze pod procesor Intela czyli jest to chyba assembler AT&T (dobrze mówię ?).
Chciałbym napisać program który wczytuje znak cyfry i zamienia go na wartość jej odpowiadającą (potrzebną w dalszej części programu która jest na razie nieistotna) oraz wyświetla na ekranie znak o kodzie ASCII wyższym o 1 od podanego (wprowadzam "1" wyświetla "2", wprowadzam "8" wyświetla "9" itp).
Wymyśliłem coś takiego (samo wyświetlanie znaku o kodzie ASCII większym o jeden):
SYSEXIT = 1 SYSREAD = 3 SYSWRITE = 4 STDOUT = 1 STDIN = 0 EXIT_SUCCESS = 0 .align 32 .data buffor: .ascii "0" buffor_len = . - buffor .text .global main main: mov $SYSREAD, %eax mov $STDIN, %ebx mov $buffor, %ecx mov $buffor_len, %edx int $0x80 mov $buffor, %eax mov $1, %ebx add %eax, %ebx mov %eax, %ecx mov $SYSWRITE, %eax mov $STDOUT, %ebx mov $buffor_len, %edx int $0x80 koniec_programu: mov $SYSEXIT, %eax mov $EXIT_SUCCESS, %ebx int $0x80
Ale podany kod nie działa, wyświetla jedynie znak który podałem :/
jesli chodzi Ci o cyfry z zakresu 0..8 to dodanie jednego to po prostu zwiekszenie wartosci "bufor" o 1 :)
ale jesli chcesz zeby z 9 robil 10, to musisz miec bufor dwuznakowy
mam w czystym asm kod na konwertowanie w obie strony, ale tej skladni ktorej Ty uzywasz nie znam, pierwszy raz na oczy widze :p
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Chciałbym napisać program który wczytuje znak cyfry i zamienia go na wartość jej odpowiadającą (potrzebną w dalszej części programu która jest na razie nieistotna) oraz wyświetla na ekranie znak o kodzie ASCII wyższym o 1 od podanego (wprowadzam "1" wyświetla "2", wprowadzam "8" wyświetla "9" itp).
Wymyśliłem coś takiego (samo wyświetlanie znaku o kodzie ASCII większym o jeden):
SYSEXIT = 1 SYSREAD = 3 SYSWRITE = 4 STDOUT = 1 STDIN = 0 EXIT_SUCCESS = 0 .align 32 .data buffor: .ascii "0" buffor_len = . - buffor .text .global main main: mov $SYSREAD, %eax mov $STDIN, %ebx mov $buffor, %ecx mov $buffor_len, %edx int $0x80 mov $buffor, %eax mov $1, %ebx add %eax, %ebx mov %eax, %ecx mov $SYSWRITE, %eax mov $STDOUT, %ebx mov $buffor_len, %edx int $0x80 koniec_programu: mov $SYSEXIT, %eax mov $EXIT_SUCCESS, %ebx int $0x80
Ale podany kod nie działa, wyświetla jedynie znak który podałem :/
jesli chodzi Ci o cyfry z zakresu 0..8 to dodanie jednego to po prostu zwiekszenie wartosci "bufor" o 1 :)
ale jesli chcesz zeby z 9 robil 10, to musisz miec bufor dwuznakowy
mam w czystym asm kod na konwertowanie w obie strony, ale tej skladni ktorej Ty uzywasz nie znam, pierwszy raz na oczy widze :p