半個月沒有學習Win32匯編了,調試能力弱了不少。
一段代碼居然死活編譯不通過,報錯: error A2022: instruction operands must be the same size
在網上搜得這一篇好文,收藏之。
ml.exe錯誤信息
FATAL 嚴重錯誤
cannot open file 不能打開文件
I/O error closing file I/O錯誤 正在關閉文件
I/O error writing file I/O錯誤 正在寫文件
I/O error reading file I/O錯誤 正在讀取文件
out of memory 缺少內存
assembler limit : macro parameter name table full 匯編限制:宏參數名表已滿
invalid command-line option 無效命令行參數
nesting level too deep 嵌套過深
unmatched macro nesting 不正確的宏嵌套
line too long 行太長
unmatched block nesting 不正確的區、段嵌套
directive must be in control block 指令必須在控制段
error count exceeds 100; stopping assembly 錯誤數超過100,停止匯編
invalid numerical command-line argument 無效命令行參數
too many arguments 太多參數、定義、沖突
statement too complex 聲明太復雜
Internal Assembler Error 內部匯編錯誤
missing source filename 找不到源文件名
COFF error writing file COFF錯誤,正在寫文件
invalid debug and browser data; file exceeds line limit 不能排除故障和瀏覽數據;文件超過行限制
cannot find link.exe 找不到連接程序
cannot find cvpack.exe 找不到cvpack.exe
SEVERE 嚴重的錯誤
memory operand not allowed in context 內存操作數無法載入上下文環境
immediate operand not allowed 當前操作數無法載入
cannot have more than one ELSE clause per IF block IF段只能有一個ELSE從句
extra characters after statement 附加的字符在聲明之后
symbol type conflict 符號類型沖突
symbol redefinition 符號已經定義
undefined symbol 符號沒有定義
non-benign record redefinition 沒有利于記錄的定義
syntax error 語法錯誤
syntax error in expression 表達式存在語法錯誤
invalid type expression 無效的類型表達式
distance invalid for word size of current segment 當前區、段的大小命令無效
PROC, MACRO, or macro repeat directive must precede LOCAL PROC, MACRO, 或 macro repeat指令必須在LOCAL之前
.MODEL must precede this directive .MODEL必須在指令之前
cannot define as public or external 不能定義為公有或外部的
segment attributes cannot change 區、段屬性不能更換
expression expected 預期表達式
operator expected 預期操作數
invalid use of external symbol 使用了無效的外部符號
operand must be RECORD type or field 操作數必須是RECORD類型或域
identifier not a record 沒有記錄標示符
record constants may not span line breaks 連續記錄不能超過行間隔
instruction operands must be the same size 命令操作數必須是一樣的長度
instruction operand must have size 命令操作數必須有長度
invalid operand size for instruction 操作數長度對于指令無效
operands must be in same segment 操作數必須在相同的段
constant expected 連續預期
operand must be a memory expression 操作數必須是一個內存表達式
expression must be a code address 表達式必須是一個代碼地址
multiple base registers not allowed 不允許多重基礎寄存器
multiple index registers not allowed 不允許多重標志寄存器
must be index or base register 必須是基礎或標志寄存器
invalid use of register 使用的寄存器無效
invalid INVOKE argument 無效的INVOKE符號
must be in segment block 必須在區、段、塊中
DUP too complex DUP太復雜
too many initial values for structure 太多結構的基礎資料
statement not allowed inside structure definition 聲明不允許在結構里面
missing operand for macro operator 找不到宏的操作數
line too long
segment register not allowed in context 上下文不允許有寄存器
string or text literal too long 文本或字符串太長
statement too complex 聲明太復雜
identifier too long 標識符太長
invalid character in file 文件里有無效字符
missing angle bracket or brace in literal 語句里找不到同樣的括弧或框架
missing single or double quotation mark in string 找不到單引號或雙引號
empty (null) string 沒有字符串
nondigit in number 沒有總數
syntax error in floating-point constant 不確定的指向中有語法錯誤
real or BCD number not allowed 不允許real或BCD編碼
text item required 必須的文本項
forced error 強制錯誤
forced error : value equal to 0 標準等于零
forced error : value not equal to 0 標準不等于零
forced error : symbol not defined 符號沒有定義
forced error : symbol defined 符號已定義
forced error : string blank 字符串是空的
forced error : string not blank 字符串不是空的
forced error : strings equal 字符串是相同的
forced error : strings not equal 字符串不是相同的
[ELSE]IF2/.ERR2 not allowed : single-pass assembler [ELSE]IF2/.ERR2不允許單獨匯編
expression too complex for .UNTILCXZ .UNTILCXZ表達式太復雜
can ALIGN only to power of 2 僅能對齊到2的冪
structure alignment must be 1, 2, 4, 8, or 16 結構對齊必須是1,2,4,8或16
expected 預定義
incompatible CPU mode and segment size 不匹配的CPU模式和段尺寸
LOCK must be followed by a memory operation LOCK指令必須跟在內存操作之后
instruction prefix not allowed 不允許的命令前綴
no operands allowed for this instruction 指令沒有操作數
invalid instruction operands 無效的指令操作數
initializer magnitude too large for specified size 初始指定尺寸太大
cannot access symbol in given segment or group 在特定的段或類不能存取符號
operands have different frames 操作數存在不同的結構
cannot access label through segment registers 在段寄存器中不能存取標記
jump destination too far 跳轉目標太遠
jump destination must specify a label 跳轉目標必須指定一個標記
instruction does not allow NEAR indirect addressing 指令不允許近間接尋址
instruction does not allow FAR indirect addressing 指令不允許遠間接尋址
instruction does not allow FAR direct addressing 指令不允許遠直接尋址
jump distance not possible in current CPU mode 跳轉距離不適合當前CPU模式
missing operand after unary operator 一元運算符之后找不到操作數
cannot mix 16- and 32-bit registers 不能結合16位和32位寄存器
invalid scale value 無效范圍標準
constant value too large 連續標準太多
instruction or register not accepted in current CPU mode 當前CPU模式不認可的指令或寄存器
reserved word expected 預期的保留字
instruction form requires 80386/486 指令需要80386/486指示
END directive required at end of file END指令必須在文件結尾
too many bits in RECORD 太多位在記錄里
positive value expected 預期的明確的標準
index value past end of string 索引標準在字符串結尾之后
count must be positive or zero 計數必須是零或明確的
count value too large 計數標準太多
operand must be relocatable 操作數必須是轉移表
constant or relocatable label expected 預期的轉移表或連續的
segment, group, or segment register expected 預期的段,類型或段寄存器
segment expected 預期的區段
invalid operand for OFFSET OFFSET操作數無效
invalid use of external absolute 由于完全外部的使用無效
segment or group not allowed 區段或類型不允許
cannot add two relocatable labels 不能增加雙重轉移表標記
cannot add memory expression and code label 不能增加內存表達式和代碼標記