Распечатать содержимое регистра CR0

Я делаю свой собственный загрузчик, который переключается в защищенный режим (32 бита), а затем печатает содержимое регистра CR0 (тот, который используется для включения защищенного режима). Мне нужно написать программу на ассемблере.

    mov esi,hello
    mov ebx,0xb8000
.loop:
    lodsb
    or al,al
    jz halt
    or eax,0x0100
    mov word [ebx], ax
    add ebx,2
    jmp .loop
halt:
    cli
    hlt
hello: db "Hello world!",0

Вы захотите распечатать содержимое CR0 в шестнадцатеричном или двоичном формате. Смотреть на это в десятичном виде окажется бессмысленным.

Sep Roland 18.12.2020 19:25

Код, который вы разместили, не имеет ничего общего с вашим вопросом? За исключением того, что я предполагаю, что они оба что-то печатают...

Nate Eldredge 18.12.2020 19:33

Похоже, вы сейчас задаете другой вопрос. Где раньше отображался регистр CR0 в защищенном режиме, теперь вы спрашиваете, как напечатать регистр EAX в 16-битном реальном режиме? Если это так, вам следует задать новый вопрос, поскольку ответ больше не соответствует первоначально заданному вопросу.

Michael Petch 19.12.2020 07:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
821
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это покажет CR0 в двоичном представлении. Он использует тот же метод вывода, что и в вашем вопросе:

    mov edx, cr0
    mov ecx, 32          ; 32 bits in a dword
    mov ebx, 000B8000h
.loop:
    mov eax, 00000130h   ; BlueOnBlack "0"
    shl edx, 1           ; Top bit to the carry flag
    adc eax, 0           ; -> AL = "0" or AL = "1"
    mov [ebx], ax
    add ebx, 2
    dec ecx
    jnz .loop
halt:
    cli
    hlt
    jmp halt

То же самое, но на этот раз в шестнадцатеричном представлении. Снова тот же метод вывода, что и в вашем вопросе:

    mov edx, cr0
    mov ecx, 8           ; 8 nibbles (groups of 4 bits) in a dword
    mov ebx, 000B8000h
.loop:
    rol edx, 4
    mov eax, edx
    and eax, 15
    add eax, 00000130h
    cmp al, '9'          ; "0" to "9" are fine
    jbe .ok
    add eax, 7           ; This produces "A" to "F"
.ok:
    mov [ebx], ax
    add ebx, 2
    dec ecx
    jnz .loop
halt:
    cli
    hlt
    jmp halt

Для решения, использующего таблицу поиска, см.:

Как преобразовать двоичное целое число в шестнадцатеричную строку?


Обычно вы записываете эти преобразования в подпрограмму, которую вы можете многократно вызывать для всех видов чисел. Однако, поскольку это код загрузчика, где, возможно, вам нужен только этот один дисплей, текущий подход может быть лучшим (наименьший размер кода).

Он печатает 0000000000000000000010001 Это правильный вывод?

Elliot Alderson 18.12.2020 20:29

@MotherDairy Я считаю 25 цифр!!! Вы должны увидеть 32 символа на экране. По крайней мере, самая правая цифра будет 1, так как вы находитесь в защищенном режиме.

Sep Roland 18.12.2020 20:32

Я уменьшил количество нулей в комментарии. И большое спасибо за помощь

Elliot Alderson 18.12.2020 21:20

Другие вопросы по теме