Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/91: Рейтинг темы: голосов - 91, средняя оценка - 4.51
 Аватар для ЗлОй ПрОграММер
9 / 9 / 2
Регистрация: 08.02.2010
Сообщений: 148

Обращение по адресу в сегмент данных

19.05.2011, 19:49. Показов 17667. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вообщем решаю такую задачу

Последовательность из 5 чисел (байт), размещённых в сегменте данных,
начиная с адреса DS:0010h. Вычислить их сумму и записать результат по адресу
DS:0020h.

собственно как обратиться к DS: 0010h ? и вынуть от туда числа, да и если можна нужна решить задачу с коментами, ну или ссылку на похожую скинуть) оч надо, сам не нашёл похожего
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.05.2011, 19:49
Ответы с готовыми решениями:

Обращение по адресу к элементам структуры
Есть структура fs: struct fs { f_element; s_element; ... n_element; }; Есть массив указателей на...

Обращение к IP адресу POST запросы
Добрый день. мне нужно написать приложение, которое будет обращаться к некому адресу (http://myhost.com/img act)и выполнять пост запросы....

Обращение к записи (record) по ее адресу
Здравствуйте, уважаемые форумчане. Писал программу с использованием списков для хранения данных: в список (TList) заносятся адреса записей...

10
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
20.05.2011, 04:13
Цитата Сообщение от ЗлОй ПрОграММер
собственно как обратиться к DS: 0010h ? и вынуть от туда числа
, элементарно, MOV AL,DS:[10h]
0
 Аватар для ЗлОй ПрОграММер
9 / 9 / 2
Регистрация: 08.02.2010
Сообщений: 148
20.05.2011, 07:21  [ТС]
понятно, а записать значение можно так mov DS:[10h],al ?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
20.05.2011, 08:24
ЗлОй ПрОграММер,
значение типа BYTE mov DS:[10h],al/ah/bl/bh/cl/ch/dl/dh
значение типа WORD mov DS:[10h],ax/bx/cx/dx/si/sp/bp/di
значение типа DOUBLE WORD mov DS:[10h],eax/ebx/ecx/edx/esi/esp/ebp/edi
0
 Аватар для ЗлОй ПрОграММер
9 / 9 / 2
Регистрация: 08.02.2010
Сообщений: 148
20.05.2011, 15:14  [ТС]
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
masm                            
model   small                   
.data   
                    
var1 db 12
 
.stack  256h                    
.code                       
main proc                   
    mov ah,var1
    mov ds:[0000h],ah
    mov al,ds:[0000h]                   
    mov ax,4c00h            
    int 21h                 
main endp                   
end main
а как получить адрес пересенной var1 ? и записать в ah
нужно связывать ds с data ?
или по другому можно ?
Assembler
1
2
;mov ax,@data               
;mov ds,ax
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
20.05.2011, 15:57
Цитата Сообщение от ЗлОй ПрОграММер Посмотреть сообщение
а как получить адрес пересенной var1 ? и записать в ah
нужно связывать ds с data ?
при запуске exe программы в регистрах ds и es находится адрес начала psp. Поэтому нужно поместить в ds адрес твоего сегмента данных. Для этого и используются строки
Assembler
1
2
mov ax,@data                           
mov ds,ax
получить адрес(смещение относительно сегмента данных) переменной var1 можно так:
mov ax, offset var1 - это для tasm/masm. В регистр ah адрес не поместится, так как адресация 16-разрядная, следовательно нужен 16-разрядный регистр
0
 Аватар для ЗлОй ПрОграММер
9 / 9 / 2
Регистрация: 08.02.2010
Сообщений: 148
20.05.2011, 19:03  [ТС]
пытаюсь вывести сообщение message1, должно выводиться 'ab' а выводится строка с лишними символами и в конце 'ab' в чём проблема ?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
masm                            
model   small                   
.data   
                    
message1 db 'ab$'
message2 db 'ac$'
 
.stack  256h                    
.code                       
main proc                   
    mov ax,@data                    
    mov es,ax
    mov al,message1
    mov ah,message2
    mov ds:[0000h],al
    mov ds:[0001h],ah   
 
    mov ah,09h                      
    mov dx,offset ds:[0000h]
    int 21h                 
    mov ax,4c00h            
    int 21h                 
main endp                   
end main
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
21.05.2011, 08:49
ЗлОй ПрОграММер, че за странный код?

Цитата Сообщение от ЗлОй ПрОграММер Посмотреть сообщение
mov ax,@data
mov es,ax
после этого в es адрес сегмента данных, но в ds то все равно адрес psp. Имена меток и переменных при трансляции станут адресами, например message1 заменится на 0 (тоже не всегда). Строка
Assembler
1
mov al,message1
будет транслироваться как
Assembler
1
mov al, ds:[0]
а так как в ds не сегмент данных, то в al попадет первый байт psp а не 'a'. Аналогично и весь дальнейший код. 'ab' в конце все таки выводится, потому что сегменты перекрываются и сегмент данных расположен сразу за psp. Функция 09h выводит на экран весь psp - "лишние символы" и за ним символы 'ab'
0
 Аватар для ЗлОй ПрОграММер
9 / 9 / 2
Регистрация: 08.02.2010
Сообщений: 148
21.05.2011, 15:35  [ТС]
Assembler
1
2
mov ax,@data
mov ds,ax
дело в том что после этого кода в отладчике меняется сегмент ds на es, и никак не посмотреть содержимое ds , как этого избежать ???

Добавлено через 16 минут
ну или если можно исправьте мой код на правильный, нужно два сообщения правильно разместить в сегменте, первое по адресу 0000h второе 0010h
Assembler
1
2
mov ax,@data
mov ds,ax
дело в том что после этого кода в отладчике меняется сегмент ds на es, и никак не посмотреть содержимое ds , как этого избежать ???

если можно подскажите как правильно разместить строку или последовательность чисел в сегменте? вот мой код, исправьте пожалуйста

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
masm                            
model   small                   
.data   
                    
message1 db 'ab$'
message2 db 'ac$'
 
.stack  256h                    
.code                       
main proc                   
    mov ax,@data                    
    mov ds,ax
    mov al,message1
    mov ah,message2
    mov ds:[0000h],al
    mov ds:[0010h],ah
    
    mov ah,09h                  
    mov dx,offset ds:[0000h]
    int 21h 
    mov ah,09h                  
    mov dx,offset ds:[0010h]
    int 21h 
        
    mov ax,4c00h            
    int 21h                 
main endp                   
end main
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
21.05.2011, 15:56
Цитата Сообщение от ЗлОй ПрОграММер Посмотреть сообщение
дело в том что после этого кода в отладчике меняется сегмент ds на es, и никак не посмотреть содержимое ds , как этого избежать ???
какой отладчик то? Если td то на дампе правая мыши -> goto... И вводишь ds:0
1
 Аватар для ЗлОй ПрОграММер
9 / 9 / 2
Регистрация: 08.02.2010
Сообщений: 148
21.05.2011, 18:50  [ТС]
понял, спасибо

Добавлено через 41 минуту
ну собственно вот благодаря вашей помощи сделал прогу, но хотелось бы её оптимизировать
интересует два вопроса, (1) как мне сделать эту прогу используя цикл
(2) что делать если произошло переполнение ?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
masm                            
model   small                   
.data   
 
var1 db 0
var2 db 4
var3 db 7
var4 db 10
var5 db 12
                
.stack  256h                    
.code                       
main proc                   
    mov ax,@data                    
    mov ds,ax
    xor ax,ax
    
    mov al,ds:[0000h]
    mov ds:[0010h],al
    add ah,al
 
    mov al,ds:[0001h]
    mov ds:[0011h],al
    add ah,al
    
    mov al,ds:[0002h]
    mov ds:[0012h],al
    add ah,al
 
    mov al,ds:[0003h]
    mov ds:[0013h],al
    add ah,al
 
    mov al,ds:[0004h]
    mov ds:[0014h],al
    add ah,al
    
    mov ds:[0020h],ah
    
    ;mov ah,09h                 
    ;mov dx,offset ds:[0000h]           
    mov ax,4c00h            
    int 21h                 
main endp                   
end main
Добавлено через 49 минут
уже не надо, разобрался сам, всем спасибо а помощь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2011, 18:50
Помогаю со студенческими работами здесь

Обращение к элементам массива по адресу
Приветствую, возникла проблема, суть в том, что бы переработать программу, используя механизм обращения по адресу. Почитал в инете, в...

Обращение к конкретному адресу в памяти
Первый вопрос: как с помощью указателя увидеть содержимое по конкретному адресу, например, по адресу BC00? Я присвоил указателю этот...

Почему обращение к недоступному адресу в памяти
Почему при проверке кода(компиляции) выскакивает сообщение :"Недостаточный размер массивов или обращение по недоступному адресу в...

К чему выполняется обращение по адресу [ebp-4]
add ESP, 12что хранится по адресу в ebp-4 arrayToStr: ; Стандартный пролог функции push EBP ...

Обращение напрямую к адресу оперативной памяти
Подскажите, как в си шарп обращаться к определённым адресам оперативной памяти и читать оттуда значения??? Нужно для оффсетов... Например,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru