Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что делает команда mov ds, ax ?

AleX Ученик (189), закрыт 12 лет назад
model small ;определили модель памяти как small
.stack 128 ;выделили под программу 128 байт памяти
.data ;объявили сегмент данных
mess db 'Hello world!$' ;определили переменную типа databyte размером 1 байт
.code ;объявляем сегмент кода
main:
;следующими двумя строками мы связываем адрес сегмента данных с его
реальным расположением в памяти. Это связано с тем, что сегмент кода и сегмент данных расположены по одному и тому же адресу в памяти при инициализации программы.
mov ax,@data
mov ds,ax
;следующие три строки кода выводят на экран надпись "Hello world!"
lea dx,mess
mov ah,09h
int 21h
;последние две строчки корректно завершают программу
mov ax,4c00h
int 21h
end main

Что делает команда movds, ax?
Лучший ответ
Krab Вark Оракул (56968) 12 лет назад
Заносит в регистр сегмента данных адрес начала данных.
Прямой команды mov ds,@data нет, поэтому приходится делать через ax.
Остальные ответы
Алексей Караиванов Просветленный (36771) 12 лет назад
перемещает из данные сегмента данных в регистр ах по идее
Builder Мыслитель (5274) 12 лет назад
копирует в регистр ds, значение регистра ax

Ассемблер: MOV A,Rn; где n=0-7
Код:
1 1 1 0 1 rrr

где rrr=000-111
Время: 1 цикл
Алгоритм: (A) : =(Rn)
Пример:

;(A)=FAH, (R4)=93H
MOV A,R4 ;(A)=93H, (R4)=93H

Ассемблер: MOV A, <direct>
Код:
1 1 1 0 0 1 0 1

direct address
Время: 1 цикл
Алгоритм: (A) :=(direct)
Пример:

;(A)=93H, (ОЗУ [40])=10H, (R0)=40H
MOV A,40H ;(A)=10H, (ОЗУ [40])=10H, (R0)=40H

Ассемблер: MOV A,@Ri; где i=0,1
Код:
1 1 1 0 0 1 1 i
Время: 1 цикл
Алгоритм: (A) : = ((Ri))
Пример:

;(A)=10H, (R0)=41H, (ОЗУ [41])=0CAH
MOV A,@R0 ;(A)=CAH, (R0)=41H, (ОЗУ [41])=0CAH

Ассемблер: MOV A,#data
Код:
0 1 1 1 0 1 0 0

#data8
Время: 1 цикл
Алгоритм: (A) :=<#data8>
Пример:

;(A)=C9H (11001001B)
MOV A,#37H ;(A)=37H (00110111B)

Ассемблер: MOV Rn, A; где n=0-7
Код:
1 1 1 1 1 rrr

где rrr=000-111
Время: 1 цикл
Алгоритм: (Rn) : =(A)
Пример:

;(A)=38H, (R0)=42H
MOV R0,A ;(A)=38H, (R0)=38H

Ассемблер: MOV Rn, <direct>; где n=0-7
Код:
1 0 1 0 1 rrr

direct address
Время: 2 циклa
Алгоритм: (Rn) :=(direct)
Пример:

;(R0)=39H, (P2)=0F2H
MOV R0,P2 ;(R0)=F2H

Ассемблер: MOV Rn,#data; где n=0-7
Код:
0 1 1 1 1 rrr

#data8
Время: 1 цикл
Алгоритм: (Rn) :=<#data8>
Пример:

;(R0)=0F5H
MOV R0,#49H ;(R0)=49H

Ассемблер: MOV <direct>,A
Код:
1 1 1 1 0 1 0 1

direct address
Время: 1 цикл
Алгоритм: (direct) :=(A)
Пример:

;(P0)=FFH, (A)=4BH
MOV P0,A ;(P0)=4BH, (A)=4BH

Ассемблер: MOV <direct>, Rn ; где n=0-7
Код:
1 0 0 0 1 rrr

direct address
Время: 2 циклa
Алгоритм: (direct) :=(Rn)
Пример:

;(PSW)=C2H, (R7)=57H
MOV PSW,R7 ;(PSW)=57H, (R7)=57H
Был здесь Просветленный (49287) 6 лет назад
перемещает в сегмент данных значение аккумулятора
BoloniBim Ученик (57) 1 год назад
Получается в этом случае не имеет значение записано в скобках или нет data и ax
 mov AX,data ;Настроим DS 

mov DS,AX ;на сегмент данных
Так как это исключение из правил.Т.е если это сегмент,как у нас data,то если мы его командой mov куда-то пересылаем,то не имеет значение,мы всегда будем пересылать одно- его сегментный адрес, а не значения данных в нём Так?
Похожие вопросы