у меня MASM32 при компиляции ругается на
1) pascal, нужен сегмент и думаю, что не много не доделана.
надо записать в байт памяти 0 с логич. адрресом segm:ofs
Оформи правильно, условия выложи полностью... Там и посмотрим.
изначально было нужно:
1 задача) запись нулевого значенияв байт памяти с адресом segm:offset(известны во время ассемблирования)
2-задача) флаг установить в состояние зависящееот регистров пары DS:BX ES:DX
Совсем забыл. Постоянно наступаю на грабли, что неправильно оформил.
Читал правила но не понял, что считать темой, а что пояснением.
Прошу на данном примере, если не затруднит, показать, как я должен был сделать.
1)
PROC MakeNull PASCAL
ARG @@LPTR:DWORD
USES ES,DI
LES DI,[@@LPTR]
XOR AL,AL
STOSB ;или MOV [ES:DI],AL
RET
ENDP MakeNull
ZF устанавливается в определённое состояние зависящее от того, задают регистровые пары DS:BX ES:DX один и тот же физический адрес или нет.
вопрос по первой задаче?
а логический адрес segm:offset не нужен?
ответ по первой задаче: DWORD - 4 байта. Т. е. 2 слова. 2 слова это и есть сегмент и смещение. Делаешь что-то типа
PUSH SEG MyVar
PUSH OFFSET MyVar
CALL MakeNull
XOR EAX,EAXДолжно быть так. Если адреса не совпадают, то ZF сбросится, иначе установится. Вариант не из лучших, но должен работать...
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