NASM (Asembly) で電卓を書こうとしています。エラーは表示されませんが、2 つの数字を入力してそれらを追加した後、プログラムが動かなくなりました。後はどうしようもない。
コードは次のとおりです。
org 100h
_start:
;LOGO
mov ah, 9
mov dx, logo1
int 21h
mov ah, 9
mov dx, logo2
int 21h
;MENU
mov ah, 9
mov dx, ramka1
int 21h
mov ah, 9
mov dx, wybor
int 21h
mov ah, 9
mov dx, dzialanie1
int 21h
mov ah, 9
mov dx, dzialanie2
int 21h
mov ah, 9
mov dx, dzialanie3
int 21h
mov ah, 9
mov dx, dzialanie4
int 21h
mov ah, 9
mov dx, dzialanie5
int 21h
mov ah, 9
mov dx, ramka2
int 21h
mov ah, 9
mov dx, nwln
int 21h
; WYBOR DZIALANIA
mov ah, 0
int 16h
cmp al, '1'
je dodawanie
cmp al, '5'
je wyjscie
dodawanie:
mov ah, 9
mov dx, zmienna1
int 21h
mov ah, 0ah
mov dx, bufor
int 21h
lea si, [bufor + 2]
mov cx, 0
mov cl, [bufor + 1]
call tekst_na_liczbe
mov [liczba1], ax
mov ah, 9
mov dx, nwln
int 21h
mov ah, 9
mov dx, zmienna2
int 21h
mov ah, 0ah
mov dx, bufor
int 21h
lea si, [bufor + 2]
mov cx, 0
mov cl, [bufor + 1]
call tekst_na_liczbe
add ax, [liczba1]
mov di, liczba
call liczbe_na_tekst
mov bl, '$'
mov bx,ax
mov [bx+liczba], bl
mov ah, 9
mov dx, wynik
int 21h
mov ah, 9
mov dx, liczba
int 21h
mov ah, 9
mov dx, nwln
int 21h
mov ah, 9
mov dx, nwln
int 21h
jmp _start
;WYJSCIE
wyjscie:
mov ax, 4C00h
int 21h
zmienna1 db "||Podaj pierwsza liczbe: $"
bufor db 15
db 0
times 15 db '$'
liczba db 15
db 0
times 15 db '$'
zmienna2 db "||Podaj druga liczbe: $"
liczba1 dd 0
liczba2 dd 0
wynik db 10, 13, "//Wynik: $"
nwln db 10, 13, '$'
menu db "Wybierz dzialanie:", 10, 13, 10, 13, '$'
;WYSWIETLENIE LOGO I MENU
logo1 db "==============================================", 10, 13, "$"
logo2 db "||Kalkulator w ASM ||", 10, 13, "$"
ramka1 db "==============================================", 10, 13, "$"
wybor db "||Wybierz dzialanie: ||", 10, 13, "$"
dzialanie1 db "||1.Dodawanie ||", 10, 13, "$"
dzialanie2 db "||2.Odejmowanie ||", 10, 13, "$"
dzialanie3 db "||3.Mnozenie ||", 10, 13, "$"
dzialanie4 db "||4.Dzielenie ||", 10, 13, "$"
dzialanie5 db "||5.Wyjcie z kalkulatora ||", 10, 13, "$"
ramka2 db "==============================================", "$"
liczbe_na_tekst:
push cx
push dx
push si
mov cx, 10
mov si, 0
.dziel:
mov dx, 0
div cx
add dl, '0'
mov bp,di
add di,si
mov dl,[bp]
inc si
cmp ax, 1
jge .dziel
push esi
dec esi
mov ecx, 0
.odwroc:
mov bx, di
mov di, cx
add di, cx
mov al,[bx]
inc cx
dec si
cmp cx, si
jl .odwroc
pop ax
pop dx
pop cx
ret
tekst_na_liczbe:
push bx
push dx
mov ax, 0
mov bx, 0
.petla:
mov dx, 10
mul dx
mov dl, [si+bx]
sub dl, '0'
add ax, dx
inc bx
cmp bx, cx
jl .petla
pop dx
pop bx
ret
申し訳ありませんが、コードの一部はポーランド語ですが、全体的には理解できるはずです。助けてくれてどうもありがとう!