Operacja na słowie 8-bitowym i wartości flag

Operacja na słowie 8-bitowym i wartości flag

Wątek przeniesiony 2014-02-07 01:44 z Nietuzinkowe tematy przez Rev.

KE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
0

Jeśli ostatnią operacją w komputerze o słowie 8-bitowym było dodawanie, w którym dwoma argumentami były

a. 116 i 12,

b. -1 i 1

to jaka jest wartość następujących flag: przeniesienie, zero, przepełnienie, znak, parzystość??

ok. widzę , że muszę napisać jak mi się wydaję jak to bd wyglądało, inaczej temat wyląduje w koszu..
a)
więc 116 to w U2: 0111 0100
12 w U2: 0000 1100
dodajac do siebie mamy:
1000 0000
wiec tak:
flaga zera bedzie równa 0(poniewaz nie jest to zero)
przeniesienia?? nie wiem co ona do konca oznacza??
przepłenienia bedzie rowna 1 , bo mamy overflow
znak bd ustawiony na 1 ( bo negatywny)
parzystość , nie wiem ??

b)
-1 w U2 1111 1111
1 w U2 0000 0001

suma: 0000 0000

wiec tak:
flaga zera bedzie rowna 1( bo mamy same zera?)

przeniesienia?? nie wiem co ona do konca oznacza??
przepłenienia bedzie rowna 1 , bo mamy overflow
znak bd ustawiony na 0 ( bo pozytyw)
parzystość nie wiem ?

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
2

http://pl.wikipedia.org/wiki/Kod_uzupe%C5%82nie%C5%84_do_dw%C3%B3ch

Dodawanie i odejmowanie w U2 odbywa się standardową metodą – traktujemy liczby jako zwykłe liczby binarne (dodatnie), dodajemy je i odejmujemy, a wynik otrzymamy w kodzie U2. Dodawanie i odejmowanie odbywa się łącznie z bitem znaku. Jeśli przeniesienie (lub pożyczka dla odejmowania) wystąpi tylko na bit znaku albo poza niego (nie jednocześnie lub wcale), wówczas mamy do czynienia z przepełnieniem. Oznacza to że wynik nie mieści się w kodowanym zakresie.

Przeniesienie jest gdy w dodawaniu słupku wynik dodawania na danej pozycji przekracza cyfrę, którą możesz na jednej pozycji zapisać. W systemie dziesiętnym to jest 10, ósemkowym 8, a w binarnym 1.
Myślę, że nie trzeba Tobie tłumaczyć, ale żebyś zrozumiał że o tym wiesz ;).

Tutaj jest krótko wyjaśnione o kontroli parzystości:
http://pl.wikipedia.org/wiki/Kontrola_parzysto%C5%9Bci

Ale wydaje mi się jednak, że w Twoim pytaniu mowa jest o parzystości reprezentowanej liczby.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
[bits 16]
[org 100h]

start:
push cs
pop ds

mov cx,1

mov al, 116
mov ah, 12
add al, ah

mov bx,0
cmovc bx, cx
mov [_c], bx

mov bx,0
cmovz bx, cx
mov [_z], bx

mov bx,0
cmovo bx, cx
mov [_o], bx

mov bx,0
cmovs bx, cx
mov [_s], bx

mov bx,0
cmovp bx, cx
mov [_p], bx

mov dx, napis
mov ah, 9
int 21h

mov cx, 5
mov bx, _c
.lup:
mov ah, 2
mov dl, byte [bx]
add dl, 48
int 21h
add bx, 2
loop .lup
ret

napis db "CZOSP",13,10,36
_c dw 0
_z dw 0
_o dw 0
_s dw 0
_p dw 0
Kopiuj
C:\PP>nasm a.asm -tbin -oa.com

C:\PP>a
CZOSP
00110
KE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
0

niestety nie mogę skompilować Twojego programu ani na ideone, ani w nasmie,
przy " C:\PP>a" wywala blad, w dosbosxie tak samo.
A chcialem poznac wartosc flag w przypadku "1 + (-1) " i sprawdzić czy dobrze myślałem.
bo głównym problemem jest to, że mamy 9 bitów na 8 maximum ( 1 0000 0000) wiec flaga przeniesienia na pewno jest "1" ale jak z resztą?
Jesli chodzi o Dosboxa, to po prostu nie działa, tylko miga kursor

w załączniku błąd:

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

Pod 64-bitowym Windowsem nie uruchomisz DOS-owego programu.
Musisz mieć 32-bitowego albo emulator taki jak DOSBox.

Pod DOSBox-em program nie działa zapewne dlatego, że emuluje procesory z epoki 386/486, a ja użyłem w programie instrukcji cmov, które pojawiły się dopiero w okolicach Pentium II, czyli już właściwie pod koniec ery DOS-a.

Trzeba byłoby przerobić program tak by używał skoków warunkowych zamiast przesunięć, by ruszył pod DOSBoxem.
Albo przerobić na program windowsowy, wtedy ruszy normalnie spod konsoli.

KE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
0

to w takim razie przerobiłbyś ten program,
czy też mógłbyś po prostu podać odpowiedź co on wywali(Wartości flag) dla "-1" i "1" ??

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
CZOSP
11001

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.