-
funkcje logiczne i arytmetyczne
Witam,
dzrodzy forumowicze, potrzebował bym bardzo:
algorytm działania poniższego programu.
Być może jest w śród was specjalista, któremu zajmie to 5 minut, nie musi być wszystko super opisane.
Chętnie pomogę w rysunkach AutoCad, NX, Catia, w 2D i 3D zgodnie z normami, również modele dynamiczne.
org 100h
lf=10
cr=13
finit
;wypisuje tekst wstepny
mov ah, 9
mov dx, wstep
int 21h
mov ah, 9
mov dx, wstep2
int 21h
mov ah, 9
mov dx, wstep255
int 21h
mov ah, 9
mov dx, wstep26
int 21h
;dodawanie
call _nwln
mov ah, 9
mov dx, wstep27
int 21h
call pob_war_z_klaw
call dodawanie
call wypiszwynik
;Odejmowanie
call _nwln
mov ah, 9
mov dx, wstep37
int 21h
call _nwln
mov ah, 9
mov dx, wstep388
int 21h
call pob_war_z_klaw
call odejmowanie
call wypiszwynik
;mnozenie
call _nwln
mov ah, 9
mov dx, wstep47
int 21h
call pob_war_z_klaw
call mnozenie
call wypiszwynik
;dzielenie
call _nwln
mov ah, 9
mov dx, wstep57
int 21h
call pob_war_z_klaw
call dzielenie
call wypiszwynik
call dzielenie_reszta
mov ah, 9
mov dx, wynikreszta
int 21h
mov eax, ecx
call _pisz_ld
call _nwln
call _nwln
mov ah, 9
mov dx, wstep266
int 21h
; operacja and
call _nwln
mov ah, 9
mov dx, wstep67
int 21h
call pob_war_z_klaw
call operacja_and
call wypiszwynik
; operacja or
call _nwln
mov ah, 9
mov dx, wstep77
int 21h
call pob_war_z_klaw
call operacja_or
call wypiszwynik
call _nwln
call _nwln
mov ah, 9
mov dx, koniec
int 21h
jmp przeskocz
; pobiweranie wartosci z klawiatury
pob_war_z_klaw:
xor ebx, ebx
xor eax, eax
xor edx, edx
call _nwln
mov ah, 9
mov dx, wstep21
int 21h
call pobieranie ; wywolany podprogram do pobrania
mov [A], ebx
xor ebx, ebx
call _nwln
mov ah, 9
mov dx, wstep22
int 21h
call pobieranie ; wywolany podprogram do pobrania
mov [B], ebx
ret
; pobieranie wartosci zakonczone
;wypisuje wynik xor ebx, ebx
wypiszwynik:
call _nwln
mov ah, 9
mov dx, wstep21
int 21h
mov eax, ecx
call _pisz_ld
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
ret
;koniec wypisuje wynik
;obliczenia
dodawanie:
pushfd
push edx
push eax
push esi
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
mov eax, [A]
add eax , [B]
mov ecx, eax
pop esi
pop eax
pop edx
popfd
ret
odejmowanie:
pushfd
push edx
push eax
push esi
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
mov eax, [A]
sub eax , [B]
mov ecx, eax
pop esi
pop eax
pop edx
popfd
ret
mnozenie:
pushfd
push edx
push eax
push esi
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
mov eax, [A]
mov ecx, [B]
imul eax , ecx
mov ecx, eax
pop esi
pop eax
pop edx
popfd
ret
dzielenie:
pushfd
push eax
push esi
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
mov eax, [A]
mov edi, [B]
div edi
xor ecx, ecx
mov ecx, eax
pop esi
pop eax
popfd
ret
dzielenie_reszta:
pushfd
push eax
push esi
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
mov eax, [A]
mov edi, [B]
div edi
xor ecx, ecx
mov ecx, edx
pop esi
pop eax
popfd
ret
operacja_and:
pushfd
push edx
push eax
push esi
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
mov eax, [A]
and eax , [B]
mov ecx, eax
pop esi
pop eax
pop edx
popfd
ret
operacja_or:
pushfd
push edx
push eax
push esi
xor ebx, ebx
xor eax, eax
xor ecx, ecx
xor edx, edx
mov eax, [A]
or eax , [B]
mov ecx, eax
pop esi
pop eax
pop edx
popfd
ret
;pobiera_liczbe_________________________________
pobieranie:
pushfd
push ecx
push edx
push eax
push esi
xor ebx, ebx
xor eax, eax
xor edx, edx
getliczba1:
mov ah, 7
int 21h
mov dl, al
mov ah, 2
int 21h
xor ah, ah
cmp ax, 0dh
je w_enter1
sub al, 30h
mov bx, ax
jmp getliczba1
w_enter1:
pop esi
pop eax
pop edx
pop ecx
popfd
ret
;liczba w ebx__________________________________
;wypisuje to co rejestrze eax___________________
_pisz_ld:
pushfd
push ecx
push edx
push eax
push esi
xor si, si
mov ecx, 10
_pisz_ld_petla:
xor edx, edx
div ecx
mov [_pisz_bufor+si], dl
inc si
or eax, eax
jnz _pisz_ld_petla
mov ah, 0eh
_pisz_ld_wypis:
mov al, [_pisz_bufor+si-1]
or al, "0"
int 10h
dec si
jnz _pisz_ld_wypis
pop esi
pop eax
pop edx
pop ecx
popfd
ret
_pisz_bufor: times 40 db 0
_nwln:
push ax
push bp
mov ax, 0e0ah
int 10h
mov al, cr
int 10h
pop bp
pop ax
ret
; po wypisaniu i nwl________________________
przeskocz:
mov ax, 4c00h
int 21h
A dd 0
B dd 0
wstep db "Witaj $"
wstep2 db "Ten prezentuje dzialanie podstawowych funkcji arytmetyki
dziesietnej $"
wstep25 db "i funkcji logicznych na liczbach calkowitych od 0 do 9
$"
wstep255 db " (Po wpisaniu wartosci liczby wcisnij ENTER)$"
wstep26 db " Funkcje arytmetyki dziesietnej: $ "
wstep27 db "-dodawanie a + b $ "
wstep37 db "-odejmowanie a - b $ "
wstep388 db "wpisz a wieksze od b$"
wstep47 db "-mnozenie a * b $ "
wstep57 db "-dzielenie a / b $"
wstep266 db "Funkcje logiczne (wartosci wpisywane w systemie HEX wynik
tez w systemie HEX)$"
wstep67 db "-funkcja logiczna and a and b $ "
wstep77 db "-funkcja logiczna or a or b $ "
wstep28 db "Wpisz wartosc: $ "
wstep21 db "a=$ "
wstep22 db "b=$ "
wynik db "wynik= $"
wynikreszta db " reszta $"
koniec db
Ostatnio edytowane przez karol91 : 05-23-2013 - 11:36
Zasady Postowania
- Nie możesz zakładać nowych tematów
- Nie możesz pisać wiadomości
- Nie możesz dodawać załączników
- Nie możesz edytować swoich postów
-
Forum Rules