Сейчас на форуме: asfa, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› CodeView отображение смещения
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 02:25
· Личное сообщение · #1

http://saveimg.ru/pictures/27-02-13/35d823a3c8ae722a834446826bd2b53a.jpg
Code:
  1. mov ah,9

Почему потом в CodeView в окне Memory 1 DS:0 показывает смещение 0108?
Может я что-то не так понял...




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 27 февраля 2013 02:44 · Поправил: plutos
· Личное сообщение · #2

Ваш буффер со строкой находится по адресу 0108, как и должно быть, если ваша строка начинается по адресу 0х0108.

A вообще лучше этот код сделать так:

mov dх, seg buffer ;DS:DX = buffer address
mov ds, dx
mov dx, offset buffer
mov ah, 9 ;function 0x9h write string
int 21

..............
buffer db ' = Test mess$'

Предполагается, что ваша строчка начинается не с "Т", а с blank (0x20h) по адресу 0108.
Если все же с "Т" (по адресу 010B), то исправьте

это:
buffer db ' = Test message$'

на вот это:
buffer db 'Test message$'

и все будет работать как надо.

-----
Give me a HANDLE and I will move the Earth.




Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 09:15
· Личное сообщение · #3

Code:
  1. Ваш буффер со строкой находится по адресу 0108, как и должно быть, если ваша строка начинается по адресу 0х0108.

если ваша строка начинается по адресу 0х0108 - Т.е. строка может по любому адресу начаться?
В другом случае я видел 0х0108 (Т.е. не 8, а B английская)



Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 14:56
· Личное сообщение · #4

Немного уточню.
Было так:
Code:
  1. CSEG segment
  2. org 100h
  3.  
  4. Start:
  5.  
  6.          mov ah,9
  7.          mov dx,offset String
  8.          int 21h
  9.  
  10.          mov ah,10h
  11.          int 16h
  12.  
  13.          int 20h
  14.  
  15. String db 'Test message...$'
  16.  
  17. CSEG ends
  18. end Start

Сделал *.com, открывают в CodeView, а у меня показывается так:
Code:
  1. http://saveimg.ru/pictures/27-02-13/35d823a3c8ae722a834446826bd2b53a.jpg

А пишут, якобы должно быть так:
Code:
  1. http://saveimg.ru/pictures/27-02-13/3bdd58e3c7fd099cde0975084f4df0cc.jpg





Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 27 февраля 2013 15:45 · Поправил: mysterio
· Личное сообщение · #5

n199a
У вас на скриншоте все четко видно что ваша строка начинается как и должно быть с адреса 0х010B.
Совет: перестаньте заниматься ерундой ! Лучше выучите что такое смещение и как правильно считать в HEX.

-----
Don_t hate the cracker - hate the code.




Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 15:54
· Личное сообщение · #6

mysterio
Не ругайтесь, я только разбираюсь.
Что такое смещение я знаю.
На сколько я понял, сегмент 0А0А, а вместо offset String = 109 - шестнадцатеричное число.
А у меня на скрине показывается просто 09. Почему так?



Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 16:01
· Личное сообщение · #7

А если через AFDPRO открывать.
Code:
  1. http://saveimg.ru/pictures/27-02-13/d2238c09f6543bd2995fe3bb64c920bb.jpg

P.S. Просто когда я такой же код, как в примере копирую и открывают через CV и AFD, то мои смещения отличаются от тех, которые на скрине к примеру.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 27 февраля 2013 16:04 · Поправил: OKOB
· Личное сообщение · #8

на скрине все в соответствии с исходником
09 - номер функции заносимый в АН
offset String - 10Bh

к последнему скрину:
такое впечатление, что загружены две разные сборки программы. Смотри окно дизассемблера. В кодВью по адресу 109 - int 20 (СD 20), а только потом строка, в АФД - сразу строка и потому смещение не 10В, а 109, т.е на 2 байта меньше.

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: n199a

Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 16:11
· Личное сообщение · #9

на скрине все в соответствии с исходником
09 - номер функции заносимый в АН
offset String - 10Bh

На сколько я понял, когда читал, то в выделенном окне синего цвета (скрин ниже) в регистре DS:10B (h не ставлю) и напротив его ещё Test message$ :
http://saveimg.ru/pictures/27-02-13/93378deb64dda08adb97d2e93779b857.jpg
Но, Test message$, как видно на скрине, находится напротив смещения 0100 и 0110.
Что я не так понимаю?



Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 16:13
· Личное сообщение · #10

такое впечатление, что загружены две разные сборки программы. Смотри окно дизассемблера. В кодВью по адресу 109 - int 20 (СD 20), а только потом строка, в АФД - сразу строка и потому смещение не 10В, а 109, т.е на 2 байта меньше.
Воооот, вот это я и хотел сказать, но не знал как выразить словами .
Т.е. получается так из-за разных версий CV?




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 27 февраля 2013 16:38 · Поправил: OKOB
· Личное сообщение · #11

n199a пишет:
Что я не так понимаю?


В окне данных, слева отображаются адреса с шагом 16 байт, 100, 110..., в шапке окна (вверху) числа от 00 до 0F, указывающие позицию байта в этом окне. Чтобы получить адрес байта нужно сложить эти два числа 100+0В=10В, где и находится первый символ сообщения 'T' с кодом ascii - 54.

Версии вашей программы разные, а CV и AFD не причем, о чем свидетельствует последний скрин из АФД со смещением строки 10В.

ЗЫ: Версии программы точно разные, потому что на чернобелом скрине из АФД сообщение не 'Test message', а что-то наподобие 'Hello World', т.к. в аскии строка 48 65 6С 6С 6F...

Скорее всего ваша программа выглядит не так как вы привели выше, а глядя на дмзассемблер вот так:
Code:
  1. CSEG segment
  2. org 100h
  3.  
  4. Start:
  5.  
  6.          mov ah,9
  7.          mov dx,offset String
  8.          int 21h
  9.  
  10.          int 20h
  11.          int 20h
  12.  
  13. String db 'Test message$'
  14.  
  15. CSEG ends
  16. end Start


-----
127.0.0.1, sweet 127.0.0.1




Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 17:03
· Личное сообщение · #12

OKOB, да, действительно так. Ошибся...



Ранг: 0.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 февраля 2013 17:23
· Личное сообщение · #13

Спасибо OKOB.
Тему можно закрывать.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 27 февраля 2013 17:31
· Личное сообщение · #14

Автор сам может закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".
Пользуйся кнопкой "Правка", не создавай сообщения подряд.


 eXeL@B —› Вопросы новичков —› CodeView отображение смещения
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати