Thread View: pl.comp.lang.asm
7 messages
7 total messages
Started by Johnny
Wed, 14 Jun 2006 07:49
Wartość c/a adres
Author: Johnny
Date: Wed, 14 Jun 2006 07:49
Date: Wed, 14 Jun 2006 07:49
27 lines
1485 bytes
1485 bytes
Robię wydawałoby się proste ćwiczenie typu jaka będzie wartość rejestru bx. title poprawnosc polecen .model small .stack 100h .code main proc mov ax,@data mov dx,ax mov bl,count int 20 main endp .data count db 10h end main Sądziłem, że będzie to 10h. Tymczasem polecenie mov bl,count traktowane jest jako mov bl,[000C], potem coś się dzieje ;-) i kolejnym poleceniem które wykonuje program jest int 14 a nie int 20. Oczywiście to lameriada ale nie znam odpowiedzi na 2 pytania: - w jaki sposób do rejestru bl przenieść wartość count a nie jej adres - dlaczego wywoływany jest int 14 a nie int 20 Z góry dzięki za odpowiedzi. -- Johnny
Re: Wartość c/a adres
Author: Michał Walenciak
Date: Wed, 14 Jun 2006 08:39
Date: Wed, 14 Jun 2006 08:39
30 lines
1469 bytes
1469 bytes
Johnny wrote: > Robię wydawałoby się proste ćwiczenie typu jaka będzie wartość rejestru > bx. title poprawnosc polecen > .model small > .stack 100h > .code > main proc > mov ax,@data > mov dx,ax > mov bl,count mov bl,[count] pozatym ds jest juz pewnie ustawiony wiec nie zmieniaj jego wartosci > int 20 20 decymalnie = 14 szesnastkowo , zamien na int 20h jesli o to CI chodzi > main endp > .data > count db 10h > end main > > > Z góry dzięki za odpowiedzi. n/p -- Kicer, gg: 3729519, kicer na poczta kropka fm - Stirlitz co jest lepsze radio czy gazeta? - zapytał podejrzliwie Müller. - Gazeta, w radio nie zawiniesz śledzia - odparł spokojnie Stirlitz.
Re: Wartość c/a adres
Author: Michał
Date: Wed, 14 Jun 2006 08:56
Date: Wed, 14 Jun 2006 08:56
13 lines
1229 bytes
1229 bytes
Johnny wrote: [...] > Oczywiście to lameriada ale nie znam odpowiedzi na 2 pytania: > - w jaki sposób do rejestru bl przenieść wartość count a nie jej adres mov bl, byte ptr [count] > - dlaczego wywoływany jest int 14 a nie int 20 To jest to samo (-; 14 w hex to 20 w dec. -- Pozdrawiam
Re: Wartość c/a adres
Author: Johnny
Date: Wed, 14 Jun 2006 09:08
Date: Wed, 14 Jun 2006 09:08
39 lines
1992 bytes
1992 bytes
Michał napisał(a): > Johnny wrote: > [...] >> Oczywiście to lameriada ale nie znam odpowiedzi na 2 pytania: >> - w jaki sposób do rejestru bl przenieść wartość count a nie jej adres > > mov bl, byte ptr [count] > >> - dlaczego wywoływany jest int 14 a nie int 20 > > To jest to samo (-; 14 w hex to 20 w dec. > Ok, do tego doszedłem. Muszę zaznaczać że chodzi mi o hex czyli int 21h. Nadal jednak mam problem z odczytem wartości count. Dla: title poprawnosc polecen .model small .stack 100h .code main proc mov bl,byte ptr [count] int 20h main endp .data count db 10h end main debug wyświetla następujące polecenia mov bl,[0006] i int 20. Skąd się bierze to [0006] skoro miało być 10h? Jeśli zaś dodać mov ax,@data mov dx,ax to debug wyświetla polecenia: mov ax,0F9D, mov dx,ax, mov bl,[000C] , int 20 Nie kumam tego. Kiedy mam zainicjować segment danych a kiedy nie i dlaczego w żadnym z tych wypadków do bl nie przenosi się wartość 10h? -- Johnny
Re: Wartość c/a adres
Author: Johnny
Date: Wed, 14 Jun 2006 09:13
Date: Wed, 14 Jun 2006 09:13
9 lines
1123 bytes
1123 bytes
Johnny napisał(a): > Jeśli zaś dodać > mov ax,@data > mov dx,ax Ma być mov ds,ax - reszta bez zmian włącznie z postawionymi problemami. -- Johnny
Re: Wartość c/a adres
Author: Michał
Date: Wed, 14 Jun 2006 09:37
Date: Wed, 14 Jun 2006 09:37
18 lines
1556 bytes
1556 bytes
Johnny wrote: [...] > debug wyświetla następujące polecenia mov bl,[0006] i int 20. Skąd się > bierze to [0006] skoro miało być 10h? [0006] oznacza wartość pod adresem (ds << 4) + 0006, zobacz co masz w bl po wykonaniu tej instrukcji. > Jeśli zaś dodać > mov ax,@data > mov dx,ax > to debug wyświetla polecenia: mov ax,0F9D, mov dx,ax, mov bl,[000C] , int 20 Dla model small wszystko jest w jednym segmencie, więc count jest przesunięty w pamięci o rozmiar instrukcji mov ax, 0f9d; mov ds, ax. -- Pozdrawiam
Re: Wartość c/a adres
Author: Johnny
Date: Wed, 14 Jun 2006 10:09
Date: Wed, 14 Jun 2006 10:09
15 lines
1236 bytes
1236 bytes
Michał napisał(a): > [0006] oznacza wartość pod adresem (ds << 4) + 0006, zobacz co masz w bl > po wykonaniu tej instrukcji. > Już rozumiem. Musiałem dodać: mov ax,cs mov ds,ax lub mov ax,@data mov ds,ax -- Johnny
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads