Считать данные с ebx - Assembler
Формулировка задачи:
Некоторая процедура
(CPU_ID)
, записывает в регистры еbx, edx, ecx символы, по 4 в каждый. В итоге должна получится строка из 12 символов(фирма процессора)
, которую надо считать и вывести. Идея такая: создать переменную из строкой в 12 символов и потом перезаписать по 4 символа из каждого регистра Проблема: Строка типаdb
. Тогда для записи в строку использую конструкциюmov dword ptr
, в которой и возникает ошибка:**Error** code.asm(29) Forward reference needs override
Подскажите, как сделать правильно.cseg segment assume cs:cseg,ds:dseg ; Print function print proc mov ah, 09h mov dx, bx int 21h ret print endp public print CPU_ID MACRO db 0fh db 0a2h ENDM start: ;Начальная инициализация mov ax,dseg mov ds,ax mov es,ax .386 pusha mov eax, 00h CPU_ID mov dword ptr _vendor_id_msg, ebx mov dword ptr _vendor_id_msg[+4], edx mov dword ptr _vendor_id_msg[+8], ecx mov ah, 04ch mov al, 1h int 21h cseg ends dseg segment _vendor_id_msg db '............', 0dh, 0ah, "$" dseg ends sseg segment stack db 256 dup(0) sseg ends end start
Решение задачи: «Считать данные с ebx»
textual
Листинг программы
CPU_ID lea esi, _vendor_id_msg mov [esi], ebx mov [esi+4], edx mov [esi+8], ecx
Объяснение кода листинга программы
- Сначала мы определяем переменную CPU_ID.
- Затем мы используем инструкцию lea (load effective address), чтобы загрузить адрес строки
vendor_id_msg
в регистр esi. - Далее мы перемещаем значение регистра ebx в память по адресу, который хранится в переменной esi (это происходит при использовании инструкции mov).
- Мы также перемещаем значение регистра edx в память по тому же адресу, что и ebx (это может быть другой регистр или переменная).
- Наконец, мы перемещаем значение регистра ecx в память по тому же адресу, что и ebx и edx (это может быть другой регистр или переменная).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д