IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Помогите доделать задачи
сообщение
Сообщение #1


Гость






у меня MASM32 при компиляции ругается на
1) pascal, нужен сегмент и думаю, что не много не доделана.
надо записать в байт памяти 0 с логич. адрресом segm:ofs
Код

call zero pascal,0B800h,12h
. . .
zero proc pascal segm,ofs
uses ds,di
lds di,dword ptr ofs
mov byte ptr ds:[di],0
ret
zero endp

2) флаг ZF установить. задают пары DS:BX ES:DX
при компиляции ругается на недостаток сегмента и на  :blink: chkaddr
mov bx,0F000h
mov ds,bx
mov bx,0FFF0h
mov dx,0FFFFh
mov es,dx
xor dx,dx
call chkaddr

mov bx,dx
call chkaddr
. . .
chkaddr proc pascal
uses eax,ebx
mov ax,ds
movzx eax,ax
shl eax,4
movzx ebx,bx
add eax,ebx
mov bx,es
shl ebx,4
movzx edx,dx
add ebx,edx
cmp eax,ebx
ret
chkaddr endp

отредактировано МОДЕРАТОРОМ
просьба оформить тему правильно
--------
условия несколько сумбурны и непонятны
и сам заголовок темы


Сообщение отредактировано: Shadow -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Оформи правильно, условия выложи полностью... Там и посмотрим.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






изначально было нужно:
1 задача) запись нулевого значенияв байт памяти с адресом segm:offset(известны во время ассемблирования)
2-задача) флаг установить в состояние зависящееот регистров пары DS:BX ES:DX
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Совсем забыл. Постоянно наступаю на грабли, что неправильно оформил.
Читал правила но не понял, что считать темой, а что пояснением.
Прошу на данном примере, если не затруднит, показать, как я должен был сделать. blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






1)
PROC MakeNull PASCAL
 ARG @@LPTR:DWORD
 USES ES,DI

 LES DI,[@@LPTR]
 XOR AL,AL
 STOSB  ;или MOV [ES:DI],AL
 RET
ENDP MakeNull


2). По-прежнему ничего не понятно. Зависимости бывают разные (там алкогольные например...), так что поясни по-точнее.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






ZF устанавливается в определённое состояние зависящее от того, задают регистровые пары DS:BX ES:DX один и тот же физический адрес или нет.


вопрос по первой задаче?
а логический адрес segm:offset не нужен? blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






ответ по первой задаче: DWORD - 4 байта. Т. е. 2 слова. 2 слова это и есть сегмент и смещение. Делаешь что-то типа
PUSH SEG MyVar
PUSH OFFSET MyVar
CALL MakeNull


2).
XOR EAX,EAX
MOV AX,DS
SHL AX,4
SHL EBX,16
SHR EBX,16;Галимый способ обнулить верхнюю часть регистра, но думать я
                ;сейчас не в состоянии
ADD EAX,EBX
XOR ECX,ECX
MOV CX,DS
SHL ECX,4
SHL EDX,16
SHR EDX,16
ADD ECX,EDX
CMP EAX,ECX
Должно быть так. Если адреса не совпадают, то ZF сбросится, иначе установится. Вариант не из лучших, но должен работать...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.12.2020 4:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name