Assembler dwa znaki

0

mamy dwa znaki, stworzmy z nich jeden o kodzie ascii bedącym srednia tych dwoch znakow
nie wiem jak zrobić średnią, bo dodawać znaki ascii się da i jest git, ale dzielić przez 2 się nie da, przynajmniej mi się program wieszał

0
yankes2014 napisał(a):

dzielić przez 2 się nie da

Da.

0

mov ax,[napis22+2]
add ax,ax
xor bx,bx
mov bx,2
div bx

gdzie napis22 to:
napis22 db 40
db 0
times 42 db '$'

wprowadzany w sposob:
mov ah, 0ah ;Wczytuje drugi ciag znakow
mov dx, napis22
int 21h

0
Azarien napisał(a):
yankes2014 napisał(a):

dzielić przez 2 się nie da

Da.

Azerin, mógłbyś podpowiedzieć jak?

1

Przesuń o 1 bit w prawo, aka shr ax. Będzie prościej i wygodniej niż za pomocą div.

0

oo dzieki wielkie, wszystko ladnie dziala
ale teraz powstal drugi problem
bo w przypadku gdy suma kodów ascii dwoch znakow jest liczbą nieparzystą, powinienem otrzymać średnią zaokrągloną w górę, jakim cudem to otrzymać?

bo gdy mam dwa znaki 'a' i 'c' to suma ascii(a) + ascii(c) = liczba parzysta i dzieląc to na 2 otrzymuje liczbę całkowitą czyli zwraca 'b'
a co w przypadku gdy mam dwa znaki 'a' i 'b' ascii(a) + ascii(b) = liczba nieparzysta i dzieląc to na 2 otrzymuje liczbę niecałkowitą i zwraca mi znak 'BETA" a chciałbym żeby zwracało 'b'

1

Jejku chłopie, pomyśl choć trochę.

add ax, 1
shr ax

A żadnej liczby niecałkowitej to nie dostaniesz bo dzielenie jest całkowitoliczbowe. Zakładam ze chodziło ci o to że zwróci ci "zaokrąglone" w dół (aka obcięte).

0

a jak jeszcze sprawdzic czy ta wartosc jest parzysta? powinna sie dzielic na 2 bez reszty, ale jak to sprawdzic?

0

Ty w ogóle rozumiesz jak działa komputer i asembler? Sprawdź czy ostatni bit jest zapalony czy nie, czyli zrób and ax, 1 ;] jeśli wynikiem jest 1 to nieparzyste a jeśli 0 to parzyste.

0
Shalom napisał(a):

Jejku chłopie, pomyśl choć trochę.

add ax, 1
shr ax

A żadnej liczby niecałkowitej to nie dostaniesz bo dzielenie jest całkowitoliczbowe. Zakładam ze chodziło ci o to że zwróci ci "zaokrąglone" w dół (aka obcięte).

Nic juz nie rozumiem.
Mam ciągi ciag1 ="a" ciag2 = "b"
daje
mov ax,[ciag1+1]
push ax
mov ax,[ciag2+1]
push ax

następnie
pop ax
mov dx,ax
pop ax
add dx, ax

mov ax,dx

shr ax,1

mov ah,02h
int 21h

to na ekranie wyswietla mi "a"
to ok zgadza sie

A jak mam
Mam ciągi ciag1 ="aa" ciag2 = "bb"
daje
mov ax,[ciag1+1]
push ax
mov ax,[ciag2+1]
push ax
mov ax,[ciag1+2]
push ax
mov ax,[ciag2+2]
push ax

następnie

pop ax
mov dx,ax
pop ax
add dx, ax

mov ax,dx

shr ax,1

mov ah,02h
int 21h

nastepnie

pop ax
mov dx,ax
pop ax
add dx, ax

mov ax,dx

shr ax,1

mov ah,02h
int 21h

to na ekranie wyswietla mi "aβ"

Jaka tu jest róznica?

1 użytkowników online, w tym zalogowanych: 0, gości: 1