Другие языки программирования и технологии

подскажите не понимаю примеры ассемблера

Все дописки это то как я понимаю то что делается - подскажите верны ли они ? Примеры .data PARAMdw 1122h PARAM1db 12h PARAM2 dd 12345678h .code moveax,0 mov ebx, 0 mov ecx,0 mov edx, 0 mov al, byte ptr [PARAM] - т.е. в AL мы ложим 2ю часть от [PARAM] _так ли это ? mov bl, [PARAM1] mov ecx,[PARAM2] mov dx, word ptr [PARAM2] - т.е. в DX ложим 2-ю часть [PARAM2]_так ли это ? mov bh, byte ptr [PARAM2] - т.е. в BH лыжим 4-ю часть [PARAM2]_так ли это ? После всех манипуляций состояние регистров будет таким: AL = 22 BL = 12 ECX = 12345678 DX = 5678 BH = 78 Ещё один пример: - это непонятный совсем пример какой-то :( .data PARAM1dd 12345678h .code mov ax, 8888h - т.е. в AX мы положили 8888h mov word ptr [PARAM1], ax - т.е. из AX мы положили/дописали? 2-ю часть? в [PARAM1] mov ebx, [PARAM1] - т.е. в EBX мы положили [PARAM1] mov ecx, 0 mov edx, 0 mov cx, word ptr [PARAM1+2] - т.е. "из примера выше word ptr=2я часть" > в CX мы ложим 2ю часть от [PARAM1=12345678h] + [PARAM2=????] mov [PARAM1], 089ABCDEFh - в [PARAM1] мы ложим/дописываем/перезаписываем? mov dx, word ptr [PARAM1] - ну а тут что ложится совсем непонятно. После всех манипуляций состояние регистров будет таким: EBX = 12348888 CX = 1234 DX = CDEF
вы слишком усложняете

для начала

PARAM dw 1122h - СЛОВО. порядок хранения обратный. в памяти по возрастанию адресов: 22 11
PARAM1 db 12h - байт
PARAM2 dd 12345678h - двойное слово. порядок хранения слов и байтов внутри слов тоже обратный. в памяти: 78 56 34 12

теперь общий вид mov
mov КУДА, ЧТО
(да и любая инструкция с двумя операндами в dos/win ассемблере под первым понимает цель под вторым - источник. (в линуксе наоборот) )

теперь адресация
PARAM, PARAM1, PARAM2 - символьные ссылки на участки памяти (вместо них можно было бы использовать конкретные адреса)

[PARAM] - понимается по разному в зависимости от второго операнда и типовой приставки
mov al, [PARAM] - считать байт по адресу PARAM в al (al - байтовый регистр)
то же самое можно записать как mov al, byte ptr [PARAM]

так же записывается для слов
mov dx, word ptr [PARAM2] =
mov dx, [PARAM2]

НО при обработке слов учитывается порядок следования байтов

и для двойных слов (опять же - команды учитывают порядок следования байтов)
mov ecx,[PARAM2] =
mov ecx, dword ptr [PARAM2]

внутри адресного оператора можно использовать смещение
byte ptr [PARAM] = 22
byte ptr [PARAM+1] = 11

/////

не стоит привыкать называть части данных "вторая/первая/десятая часть".
двойное слово состоит их младшего и старшего слов
слово из младшего и старшего байтов
Максим Makus
Максим Makus
17 923
Лучший ответ
Assembler видео уроки - http://exevideo.net