Преобразование проблемы: __ asm __ __ энергозависимый __

Основываясь ответ roninek , я нашел лучшее решение быть следующим:

в/app/helpers/application.rb:

def with_format(format, &block)
  old_format = @template_format
  @template_format = format
  result = block.call
  @template_format = old_format
  return result
end

В/app/views/foo/bar.json:

<% with_format('html') do %>
  <%= h render(:partial => '/foo/baz') %>
<% end %>

альтернативное решение должно было бы переопределить render для принятия :format параметр.

я не мог заставить render :file работать с местными жителями и без некоторого пути wonkiness.

5
задан starblue 17 October 2009 в 08:10
поделиться

1 ответ

Предполагая, что вы говорите о наборе команд x86, вот несколько вещей, которые следует запомнить:

  1. инструкция «outb» выводит один байт, что эквивалентно типу «char» или « unsigned char »в C / C ++. Для вывода 16-битного (поскольку вы используете "unsigned short") слова нужно использовать "outw"
  2. , при этом Intel рекомендует (и требует VS) использовать мнемонику инструкций " out ", а размер порта определяется размером операнда. Например, «out dx, ax » будет эквивалентно для «outw», а «out dx, al » эквивалентно «outb»
  3. на x86 «out» Инструкция требует, чтобы порт и выходное значение были помещены в регистры (e) dx и {eax / ax / al} соответственно. Хотя Nasm может сделать это за вас (у меня нет под рукой компилятора, поэтому я не могу это подтвердить), в VS вы должны делать это так, как это делается на уровне процессора.
  4. нет причин чтобы указать ключевое слово volatile с помощью __asm. Любые встроенные инструкции сборки заставляют компилятор VS отключать кеширование чтения (для чего предназначено ключевое слово volatile)

Вот код (при условии, что вы пишете в 16-битный порт):

void outportw(unsigned short port, unsigned short data)
{
    __asm  mov ax, data; 
    __asm  mov dx, port; 
    __asm  out dx, ax;
}

в случае, если вы пишете в 8- битовый порт, код должен выглядеть так:

void outportb(unsigned short port, unsigned char data)
{
    __asm  mov al, data; 
    __asm  mov dx, port; 
    __asm  out dx, al;
}
8
ответ дан 14 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: