🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
7 messages
7 total messages Started by Johnny Wed, 14 Jun 2006 07:49
Wartość c/a adres
#328
Author: Johnny
Date: Wed, 14 Jun 2006 07:49
27 lines
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
#329
Author: Michał Walenciak
Date: Wed, 14 Jun 2006 08:39
30 lines
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
#330
Author: Michał
Date: Wed, 14 Jun 2006 08:56
13 lines
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
#331
Author: Johnny
Date: Wed, 14 Jun 2006 09:08
39 lines
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
#332
Author: Johnny
Date: Wed, 14 Jun 2006 09:13
9 lines
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
#333
Author: Michał
Date: Wed, 14 Jun 2006 09:37
18 lines
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
#334
Author: Johnny
Date: Wed, 14 Jun 2006 10:09
15 lines
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