(ASM) Ошибка при перемещении байта в указатель [дубликат]

Простой способ, используя commons-lang-2.3.jar, что библиотека java для клонирования списка

link download commons-lang-2.3.jar

Как использовать

oldList.........
List newList = new ArrayList();
foreach(YourObject obj : oldList){
   newList.add((YourObject)SerializationUtils.clone(obj));
}

Надеюсь, это поможет.

: D

5
задан cgmb 11 May 2016 в 00:27
поделиться

5 ответов

0FFFFFFFFh

Microsoft (R) Macro Assembler Version 6.14.8444

Авторское право (C) Microsoft Corp 1981-1997. Все права защищены.

0
ответ дан BaiJiFeiLong 19 August 2018 в 01:54
поделиться
  • 1
    Этот ответ не добавляет ничего, чего еще нет в других ответах. Если что-нибудь, оставьте комментарий на ответ Грега. – Peter Cordes 18 November 2016 в 12:01

Это зависит от вкуса вашего ассемблера.

  • AT & amp; T: movl $0xFFFFFFBB, %ecx
  • Intel: mov ecx, 0FFFFFFBBh

Синтаксис FYI, AT & amp; T используется ассемблерами, такими как GNU Assembler , тогда как NASM и большинство других используют Intel.

10
ответ дан Benoit 19 August 2018 в 01:54
поделиться
  • 1
    im, используя VC ++ 10.0, Digital Mars C ++ 10.0 и FASM, используя Intel. 0ffffffbbh – huseyin tugrul buyukisik 31 July 2012 в 10:41
  • 2
    @ tuğrul büyükışık, это правильный ответ СПАСИБО! – Arcytoi 2 August 2012 в 03:44
  • 3
    На самом деле, GNU as, FASM и NASM поддерживают синтаксис 0xffffffbb для шестнадцатеричных констант. (GNU as требует .intel_syntax noprefix директивы для использования синтаксиса Intel или -masm=intel, переданного в GCC). – Ruslan 4 April 2016 в 04:11
  • 4
    @Ruslan Я не знал эту функцию в GCC! Благодаря! – Benoit 4 April 2016 в 19:52

Это зависит от вашего ассемблера, но общая нотация для шестнадцатеричных литералов - 0FFFFFFBBh.

1
ответ дан Greg Hewgill 19 August 2018 в 01:54
поделиться

Hex-номера обычно всегда представлены с ведущим 0x, поэтому вы используете 0xFFFFFFBB.

2
ответ дан Marc B 19 August 2018 в 01:54
поделиться

См. wiki wiki для ссылок на ассемблерные руководства и множество других материалов.


Различные ассемблеры x86 поддерживают один или оба этих синтаксиса для шестнадцатеричных констант :

  • 0xDEADBEEF: NASM (и совместимо), GNU as , FASM , MSVC inline asm (но not MASM)
  • 0DEADBEEFh: NASM (и совместимый), FASM, MASM , TASM.

Ассемблеры DOS / Windows-only часто поддерживают синтаксис ...h. Портативные ассемблеры обычно поддерживают синтаксис 0x... или оба.

Обратите внимание на ведущий 0: числовые константы всегда должны начинаться с цифры, чтобы отличать их от имен символов.

Также обратите внимание, что ассемблеры, такие как компиляторы C, могут оценивать выражения во время сборки, поэтому вы можете написать foo & 0xF (если foo является константой ассемблера, определенной с помощью foo equ 0xABC или чего-то еще). Вы можете даже добавить / вычесть из меток (которые являются константами времени ссылки, а не время сборки), поэтому такие вещи, как mov eax, OFFSET label - 20, все еще собираются в mov r32, imm32.


Из Раздел руководства NASM по константам :

Некоторые примеры (все производят точно такой же код):

    mov     ax,200          ; decimal 
    mov     ax,0200         ; still decimal 
    mov     ax,0200d        ; explicitly decimal 
    mov     ax,0d200        ; also decimal 
    mov     ax,0c8h         ; hex 
    mov     ax,$0c8         ; hex again: the 0 is required 
    mov     ax,0xc8         ; hex yet again 
    mov     ax,0hc8         ; still hex 
    mov     ax,310q         ; octal 
    mov     ax,310o         ; octal again 
    mov     ax,0o310        ; octal yet again 
    mov     ax,0q310        ; octal yet again 
    mov     ax,11001000b    ; binary 
    mov     ax,1100_1000b   ; same binary constant 
    mov     ax,1100_1000y   ; same binary constant once more 
    mov     ax,0b1100_1000  ; same binary constant yet again 
    mov     ax,0y1100_1000  ; same binary constant yet again

Most ассемблеры также допускают символьные литералы, такие как '0' для ASCII ноль. Или даже '0123' для четырех цифр ASCII, упакованных в 32-битное целое число. Некоторые поддерживающие escape-последовательности (\n'), некоторые (например, YASM) этого не делают. NASM поддерживает только escape-последовательности внутри backquotes, а не двойные кавычки.


Другие платформы:

ARM-ассемблер : 0xDEADBEEF работает.

Я думаю, 0x ... типичен. 0 ... h - это в основном вещь DOS.

4
ответ дан Peter Cordes 19 August 2018 в 01:54
поделиться
  • 1
    MASM сам по себе не понимает префикс 0x даже в современных версиях сборщиков Microsft. Если вы компилируете встроенный код сборки в VC / VC ++, он должен принять его внутри в __asm. Я не знаю авторитетного источника, но это был мой опыт работы с MASM / Visual C / C ++ в течение нескольких лет. – Michael Petch 11 May 2016 в 15:53
  • 2
    Я подтвердил, что последняя версия VC ++, которая выпустила 16-разрядный код (1.52c, выпущенный в 1993 году), поддерживала 0x в качестве префикса с встроенной сборкой. Я взял последний файл MASM VS 2015, и он не смог собрать файл сборки с префиксом 0x и прервать с помощью error A2206: missing operator in expression – Michael Petch 11 May 2016 в 16:09
  • 3
    @MichaelPetch: Спасибо за проверку этого. Обновлен мой ответ, чтобы не быть предвзятым по отношению к синтаксису DOS-стиля 0...h, хотя мне лично это не нравится. – Peter Cordes 11 May 2016 в 20:44
Другие вопросы по тегам:

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