Программа ввода-вывода SPARC "Hello World" - PullRequest
0 голосов
/ 08 марта 2019

Ниже приведен код и информация о программе ARC:

Адреса памяти, связанные с устройством ввода-вывода консоли:

  • 0xffff0000 - это консоль(выходной) порт данных

  • 0xffff0004 - порт состояния консоли (вывода), где бит 7 - флаг готовности (0: не готов, 1: готов)

Печать символа достигается с помощью:

  • Проверка флага готовности, чтобы определить, готово ли устройство к печати, т. Е. Проверить, равен ли бит 7 порта состояния вывода.установить 1

  • Сохранение символа в порт выходных данных

    ! Prints "Hello, world!\n" in the message area.
    .begin
    BASE.equ 0x3fffc0            !Starting point of the memory mapped region
    COUT.equ 0x0                 !0xffff0000 Console Data Port
    COSTAT.equ 0x4               !0xffff0004 Console Status Port
    .org 2048
    add %r0, %r0, %r2
    add %r0, %r0, %r4
    sethi BASE, %r4
    Loop:ld [%r2 + String], %r3  !Load next char into r3
    addcc %r3,%r0,%r3
    be End! stop if null
    Wait:ldub[%r4+COSTAT], %r1
    andcc %r1, 0x80, %r1
    be Wait
    stb%r3, [%r4+COUT]            !Print to console
    add %r2, 4, %r2               !increment String offset (r2)
    ba Loop
    End:halt                      !A non-standard instruction to stop the simulator
    .org 3000                     ! The "Hello, world!" string
    String:0x48, 0x65, 0x6c, 0x6c, 0x6f0x2c, 0x20, 0x77, 0x6f, 0x72 0x6c, 0x64, 0x21, 0x0a, 0
    .end
    

Я понимаю, что программа делает в целом, но я делаюне понимаю нескольких вещей

  1. Как мы переходим от шестнадцатеричных чисел в "String" к буквам, которые выводятся на консоль?

    stb %r3, [%r4+COUT]
    

Насколько я понимаю, данные будут храниться в% r3 до [% r4 + COUT].Как это меняется на соответствующую букву?

ldub[%r4+COSTAT], %r1

Кажется, что это только 128 или 0. Если это 0, программа возвращается назад и загружает это снова, в результате чего 128 для продолжения программы.Почему это происходит?

Где адреса карт памяти для вывода на консоль?Это будет [% r4] или адрес строки

stb %r3, [%r4+COUT]
...