Считать данные с 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

Объяснение кода листинга программы

  1. Сначала мы определяем переменную CPU_ID.
  2. Затем мы используем инструкцию lea (load effective address), чтобы загрузить адрес строки vendor_id_msg в регистр esi.
  3. Далее мы перемещаем значение регистра ebx в память по адресу, который хранится в переменной esi (это происходит при использовании инструкции mov).
  4. Мы также перемещаем значение регистра edx в память по тому же адресу, что и ebx (это может быть другой регистр или переменная).
  5. Наконец, мы перемещаем значение регистра ecx в память по тому же адресу, что и ebx и edx (это может быть другой регистр или переменная).

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы