当前位置:文档之家› C语言命语法错误大全

C语言命语法错误大全

C语言命语法错误大全
C语言命语法错误大全

fatal error C1004: unexpected end of file found

未找到文件末尾(可能是括号匹配问题)

fatal error C1021: invalid preprocessor command '1nclude'

无效的编译预处理命令'1nclude'

fatal error C1083: Cannot open include file: 'stdi.h': No such file or directory 不能打开头文件'stdi.h',文件或文件夹不存在

error C2101: '&' on constant

不能计算常量的地址

error C2059: syntax error : 'while'

在'while'附近,存在语法错误

error C2061: syntax error : identifier 'x'

标识符x的附近,存在语法错误

error C2065: 'i' : undeclared identifier

变量i未定义

error C2078: too many initializers

数组/结构等变量初始化时的数据太多

error C2087: '' : missing subscript

丢失数组下标

error C2106: '=' : left operand must be l-value

'='的左侧应当是左值,即不能是常量

error C2115: '=' : incompatible types

'='两侧的类型不兼容

error C2133: 'a' : unknown size

a(可能是数组名)的大小不确定。

error C2137: empty character constant

空的字符常量

error C2143: syntax error : missing ';' before ......

在......之前,缺少';'

error C2146: syntax error : missing ')' before identifier '......'

在标识符'......'之前缺少')'

error C2181: illegal else without matching if

else缺少匹配的if

error C2198: 'printf' : too few actual parameters

'printf'函数的参数太少

error C2223: left of '->x' must point to struct/union

'->x'的左侧应是结构类型变量或联合类型变量

error C2224: left of '.x' must have struct/union type

'.x'的左侧应是结构类型变量或联合类型变量

error C2371: 'f1' : redefinition; different basic types

函数'f1'的接口被重定义,参数类型或返回值类型不一致

warning C4101: 'x' : unreferenced local variable

'x'是一个从未被使用的局部变量

warning C4013: 'fi' undefined; assuming extern returning int

函数'fi'未定义,假设其是外部函数,返回值类型是int

warning C4020: 'fun' : too many actual parameters

调用'fun'函数时,有太多的实参

warning C4033: 'f3' must return a value

函数'f3'应当有返回值语句

warning C4047: '=' : 'int *' differs in levels of indirection from 'int '

赋值运算中的类型转换:从'int '转换到'int *'可能存在问题

warning C4098: 'f2' : 'void' function returning a value

函数'f2'是无返回值的函数,竟然有返回值语句。

warning C4133: 'function' : incompatible types - from '...' to '...'

不兼容的类型转换(从'...'类型向'...'类型)

warning C4244: 'initializing' : conversion from'const double' to'int', possible loss of data

在初始化数据时,类型转换可能导致数据丢失

warning C4305: 'initializing' : truncation from 'const int ' to 'char '

初始化时,数据被截断

warning C4700: local variable 'x' used without having been initialized

局部变量'x'在被使用之前未初始化,

error LNK2001: unresolved external symbol _f5

f5从未定义

1. Ambiguous operators need parentheses —不明确的运算需要用括号括起

2. Ambiguous symbol 'xxx' —不明确的符号

3. Argument list syntax error —参数表语法错误

4. Array bounds missing —丢失数组界限符

5. Array size toolarge —数组尺寸太大

6. Bad character in paramenters —参数中有不适当的字符

7. Bad file name format in include directive —包含命令中文件名格式不正确

8. Bad ifdef directive synatax —编译预处理ifdef有语法错

9. Bad undef directive syntax —编译预处理undef有语法错

10. Bit field too large —位字段太长

11. Call of non-function —调用未定义的函数

12. Call to function with no prototype —调用函数时没有函数的说明

13. Cannot modify a const object —不允许修改常量对象

14. Case outside of switch —漏掉了case 语句

15. Case syntax error — Case 语法错误

16. Code has no effect —代码不可能执行到

17. Compound statement missing{ —分程序漏掉"{"

18. Conflicting type modifiers —不明确的类型说明符

19. Constant expression required —要求常量表达式

20. Constant out of range in comparison —在比较中常量超出范围

21. Conversion may lose significant digits —转换时会丢失意义的数字

22. Conversion of near pointer not allowed —不允许转换近指针

23. Could not find file 'xxx' —找不到XXX文件

24. Declaration missing ; —说明缺少";"

25. Declaration syntax error —说明中出现语法错误

26. Default outside of switch — Default 出现在switch语句之外

27. Define directive needs an identifier —定义编译预处理需要标识符

28. Division by zero —用零作除数

29. Do statement must have while — Do-while语句中缺少while部分

30. Enum syntax error —枚举类型语法错误

31. Enumeration constant syntax error —枚举常数语法错误

32. Error directive :xxx —错误的编译预处理命令

33. Error writing output file —写输出文件错误

34. Expression syntax error —表达式语法错误

35. Extra parameter in call —调用时出现多余错误

36. File name too long —文件名太长

37. Function call missing ) —函数调用缺少右括号

38. Fuction definition out of place —函数定义位置错误

39. Fuction should return a value —函数必需返回一个值

40. Goto statement missing label — Goto语句没有标号

41. Hexadecimal or octal constant too large — 16进制或8进制常数太大

42. Illegal character 'x' —非法字符x

43. Illegal initialization —非法的初始化

44. Illegal octal digit —非法的8进制数字

45. Illegal pointer subtraction —非法的指针相减

46. Illegal structure operation —非法的结构体操作

47. Illegal use of floating point —非法的浮点运算

48. Illegal use of pointer —指针使用非法

49. Improper use of a typedefsymbol —类型定义符号使用不恰当

50. In-line assembly not allowed —不允许使用行间汇编

51. Incompatible storage class —存储类别不相容

52. Incompatible type conversion —不相容的类型转换

53. Incorrect number format —错误的数据格式

54. Incorrect use of default — Default使用不当

55. Invalid indirection —无效的间接运算

56. Invalid pointer addition —指针相加无效

57. Irreducible expression tree —无法执行的表达式运算

58. Lvalue required —需要逻辑值0或非0值

59. Macro argument syntax error —宏参数语法错误

60. Macro expansion too long —宏的扩展以后太长

61. Mismatched number of parameters in definition —定义中参数个数不匹配

62. Misplaced break —此处不应出现break语句

63. Misplaced continue —此处不应出现continue语句

64. Misplaced decimal point —此处不应出现小数点

65. Misplaced elif directive —不应编译预处理elif

66. Misplaced else —此处不应出现else

67. Misplaced else directive —此处不应出现编译预处理else

68. Misplaced endif directive —此处不应出现编译预处理endif

69. Must be addressable —必须是可以编址的

70. Must take address of memory location —必须存储定位的地址

71. No declaration for function 'xxx' —没有函数xxx的说明

72. No stack —缺少堆栈

73. No type information —没有类型信息

74. Non-portable pointer assignment —不可移动的指针(地址常数)赋值

75. Non-portable pointer comparison —不可移动的指针(地址常数)比较

76. Non-portable pointer conversion —不可移动的指针(地址常数)转换

77. Not a valid expression format type —不合法的表达式格式

78. Not an allowed type —不允许使用的类型

79. Numeric constant too large —数值常太大

80. Out of memory —内存不够用

81. Parameter 'xxx' is never used —能数xxx没有用到

82. Pointer required on left side of -> —符号->的左边必须是指针

83. Possible use of 'xxx' before definition —在定义之前就使用了xxx (警告)

84. Possibly incorrect assignment —赋值可能不正确

85. Redeclaration of 'xxx' —重复定义了xxx

86. Redefinition of 'xxx' is not identical — xxx的两次定义不一致

87. Register allocation failure —寄存器定址失败

88. Repeat count needs an lvalue —重复计数需要逻辑值

89. Size of structure or array not known —结构体或数给大小不确定

90. Statement missing ; —语句后缺少";"

91. Structure or union syntax error —结构体或联合体语法错误

92. Structure size too large —结构体尺寸太大

93. Sub scripting missing ] —下标缺少右方括号

94. Superfluous & with function or array —函数或数组中有多余的"&"

95. Suspicious pointer conversion —可疑的指针转换

96. Symbol limit exceeded —符号超限

97. Too few parameters in call —函数调用时的实参少于函数的参数不

98. Too many default cases — Default太多(switch语句中一个)

99. Too many error or warning messages —错误或警告信息太多

100. Too many type in declaration —说明中类型太多

101. Too much auto memory in function —函数用到的局部存储太多102. Too much global data defined in file —文件中全局数据太多103. Two consecutive dots —两个连续的句点

104. Type mismatch in parameter xxx —参数xxx类型不匹配

105. Type mismatch in redeclaration of 'xxx' — xxx重定义的类型不匹配

106. Unable to create output file 'xxx' —无法建立输出文件xxx 107. Unable to open include file 'xxx' —无法打开被包含的文件xxx 108. Unable to open input file 'xxx' —无法打开输入文件xxx

109. Undefined label 'xxx' —没有定义的标号xxx

110. Undefined structure 'xxx' —没有定义的结构xxx

111. Undefined symbol 'xxx' —没有定义的符号xxx

112. Unexpected end of file in comment started on line xxx —从xxx 行开始的注解尚未结束文件不能结束

113. Unexpected end of file in conditional started on line xxx —从xxx 开始的条件语句尚未结束文件不能结束

114. Unknown assemble instruction —未知的汇编结构

115. Unknown option —未知的操作

116. Unknown preprocessor directive: 'xxx' —不认识的预处理命令xxx 117. Unreachable code —无路可达的代码

118. Unterminated string or character constant —字符串缺少引号119. User break —用户强行中断了程序

120. Void functions may not return a value — Void类型的函数不应有返回值

121. Wrong number of arguments —调用函数的参数数目错

122. 'xxx' not an argument — xxx不是参数

123. 'xxx' not part of structure — xxx不是结构体的一部分

124. xxx statement missing ( — xxx语句缺少左括号

125. xxx statement missing ) — xxx语句缺少右括号

126. xxx statement missing ; — xxx缺少分号

127. xxx' declared but never used —说明了xxx但没有使用

128. xxx' is assigned a value which is never used —给xxx赋了值但未用过

C语言编译错误信息锦集

说明:Turbo C 的源程序错误分为三种类型:致命错误、一般错误和警告。其中,致命错误通常是内部编译出错;一般错误指程序的语法错误、磁盘或内存存取错误或命令行错误等;警告则只是指出一些得怀疑的情况,它并不防止编译的进行。

下面按字母顺序A~Z分别列出致命错误及一般错误信息,英汉对照及处理方法:

(一)、致命错误英汉对照及处理方法:

A-B致命错误

Bad call of in-line function (内部函数非法调用)

分析与处理:在使用一个宏定义的内部函数时,没能正确调用。一个内部函数以两个下划线(__)开始和结束。

Irreducable expression tree (不可约表达式树)

分析与处理:这种错误指的是文件行中的表达式太复杂,使得代码生成程序无法为它生成代码。这种表达式必须避免使用。

Register allocation failure (存储器分配失败)

分析与处理:这种错误指的是文件行中的表达式太复杂,代码生成程序无法为它生成代码。此时应简化这种繁杂的表达式或干脆避免使用它。

(二)、一般错误信息英汉照及处理方法

#operator not followed by maco argument name(#运算符后没跟宏变元名)

分析与处理:在宏定义中,#用于标识一宏变串。“#”号后必须跟一个宏变元名。?xxxxxx? not anargument (?xxxxxx?不是函数参数)

分析与处理:在源程序中将该标识符定义为一个函数参数,但此标识符没有在函数中出现。

Ambiguous symbol ?xxxxxx? (二义性符号?xxxxxx?)

分析与处理:两个或多个结构的某一域名相同,但具有的偏移、类型不同。在变量或表达式中引用该域而未带结构名时,会产生二义性,此时需修改某个域名或在引用时加上结构名。

Argument # missing name (参数#名丢失)

分析与处理:参数名已脱离用于定义函数的函数原型。如果函数以原型定义,该函数必须包含所有的参数名。

Argument list syntax error (参数表出现语法错误)

分析与处理:函数调用的参数间必须以逗号隔开,并以一个右括号结束。若源文件中含有一个其后不是逗号也不是右括号的参数,则出错。

Array bounds missing (数组的界限符"]"丢失)

分析与处理:在源文件中定义了一个数组,但此数组没有以下右方括号结束。Array size too large (数组太大)

分析与处理:定义的数组太大,超过了可用内存空间。

Assembler statement too long (汇编语句太长)

分析与处理:内部汇编语句最长不能超过480字节。

Bad configuration file (配置文件不正确)

分析与处理:TURBOC.CFG配置文件中包含的不是合适命令行选择项的非注解文字。配置文件命令选择项必须以一个短横线开始。

Bad file name format in include directive(包含指令中文件名格式不正确)

分析与处理:包含文件名必须用引号("filename.h")或尖括号()括起来,否则将产生本类错误。如果使用了宏,则产生的扩展文本也不正确,因为无引号没办法识别。

Bad ifdef directive syntax (ifdef指令语法错误)

分析与处理:#ifdef必须以单个标识符(只此一个)作为该指令的体。

Bad ifndef directive syntax (ifndef指令语法错误)

分析与处理:#ifndef 必须以单个标识符(只此一个)作为该指令的体。

Bad undef directive syntax (undef指令语法错误)

分析与处理:#undef指令必须以单个标识符(只此一个)作为该指令的体。

Bad file size syntax (位字段长语法错误)

分析与处理:一个位字段长必须是1—16位的常量表达式。

Call of non-functin (调用未定义函数)

分析与处理:正被调用的函数无定义,通常是由于不正确的函数声明或函数名拼错而造成。

Cannot modify a const object (不能修改一个长量对象)

分析与处理:对定义为常量的对象进行不合法操作(如常量赋值)引起本错误。Case outside of switch (Case 出现在switch外)

分析与处理:编译程序发现Case语句出现在switch语句之外,这类故障通常是由于括号不匹配造成的。

Case statement missing (Case语句漏掉)

分析与处理:Case语必须包含一个以冒号结束的常量表达式,如果漏了冒号或在冒号前多了其它符号,则会出现此类错误。

Character constant too long (字符常量太长)

分析与处理:字符常量的长度通常只能是一个或两个字符长,超过此长度则会出现这种错误。

Compound statement missing (漏掉复合语句)

分析与处理:编译程序扫描到源文件未时,未发现结束符号(大括号),此类故障通常是由于大括号不匹配所致。

Conflicting type modifiers (类型修饰符冲突)

分析与处理:对同一指针,只能指定一种变址修饰符(如near 或far);而对于同一函数,也只能给出一种语言修饰符(如Cdecl、pascal或interrupt)。

Constant expression required (需要常量表达式)

分析与处理:数组的大小必须是常量,本错误通常是由于#define常量的拼写错误引起。

Could not find file ?xxxxxx.xxx? (找不到?xxxxxx.xx?文件)

分析与处理:编译程序找不到命令行上给出的文件。

Declaration missing (漏掉了说明)

分析与处理:当源文件中包含了一个struct或union域声明,而后面漏掉了分号,则会出现此类错误。

Declaration needs type or storage class(说明必须给出类型或存储类)

分析与处理:正确的变量说明必须指出变量类型,否则会出现此类错误。

Declaration syntax error (说明出现语法错误)

分析与处理:在源文件中,若某个说明丢失了某些符号或输入多余的符号,则会出现此类错误。

Default outside of switch (Default语句在switch语句外出现)

分析与处理:这类错误通常是由于括号不匹配引起的。

Define directive needs an identifier (Define指令必须有一个标识符)

分析与处理:#define 后面的第一个非空格符必须是一个标识符,若该位置出现其它字符,则会引起此类错误。

Division by zero (除数为零)

分析与处理:当源文件的常量表达式出现除数为零的情况,则会造成此类错误。Do statement must have while (do语句中必须有While关键字)

分析与处理:若源文件中包含了一个无While关键字的do语句,则出现本错误。DO while statement missing ( (Do while语句中漏掉了符号"(")

分析与处理:在do语句中,若while关键字后无左括号,则出现本错误。

Do while statement missing;(Do while语句中掉了分号)

分析与处理:在DO语句的条件表达式中,若右括号后面无分号则出现此类错误。Duplicate Case (Case情况不唯一)

分析与处理:Switch语句的每个case必须有一个唯一的常量表达式值。否则导致此类错误发生。

Enum syntax error (Enum语法错误)

分析与处理:若enum说明的标识符表格式不对,将会引起此类错误发生。Enumeration constant syntax error (枚举常量语法错误)

分析与处理:若赋给enum类型变量的表达式值不为常量,则会导致此类错误发生。

Error Directive : xxxx (Error指令:xxxx)

分析与处理:源文件处理#error指令时,显示该指令指出的信息。

Error Writing output file (写输出文件错误)

分析与处理:这类错误通常是由于磁盘空间已满,无法进行写入操作而造成。Expression syntax error (表达式语法错误)

分析与处理:本错误通常是由于出现两个连续的操作符,括号不匹配或缺少括号、前一语句漏掉了分号引起的。

Extra parameter in call (调用时出现多余参数)

分析与处理:本错误是由于调用函数时,其实际参数个数多于函数定义中的参数个数所致。

Extra parameter in call to xxxxxx(调用xxxxxxxx函数时出现了多余参数)

File name too long (文件名太长)

分析与处理:#include指令给出的文件名太长,致使编译程序无法处理,则会出现此类错误。通常DOS下的文件名长度不能超过64个字符。

For statement missing ) (For语名缺少")")

分析与处理:在for语句中,如果控制表达式后缺少右括号,则会出现此类错误。For statement missing( (For语句缺少"(")

For statement missing; (For 语句缺少";")

分析与处理:在for语句中,当某个表达式后缺少分号,则会出现此类错误。

Function call missing) (函数调用缺少")")

分析与处理:如果函数调用的参数表漏掉了右手括号或括号不匹配,则会出现此类错误。

Function definition out ofplace (函数定义位置错误)

Function doesn?t tak e a variable number of argument(函数不接受可变的参数个数) Goto statement missing label (Goto语句缺少标号)

If statement missing( (If语句缺少"(")

If statement missing) (If语句缺少")")

lllegal initalization (非法初始化)

lllegal octal digit (非法八进制数)

分析与处理:此类错误通常是由于八进制常数中包含了非八进制数字所致。lllegal pointer subtraction (非法指针相减)

lllegal structure operation (非法结构操作)

lllegal use of floating point (浮点运算非法)

lllegal use of pointer (指针使用非法)

Improper use of a typedef symbol (typedef符号使用不当)

Incompatible storage class (不相容的存储类型)

Incompatible type conversion (不相容的类型转换)

Incorrect commadn line argument:xxxxxx (不正确的命令行参数:xxxxxxx) Incorrect commadn file argument:xxxxxx (不正确的配置文件参数:xxxxxxx) Incorrect number format (不正确的数据格式)

Incorrect use of default (deflult不正确使用)

Initializer syntax error (初始化语法错误)

Invaild indrection (无效的间接运算)

Invalid macro argument separator (无效的宏参数分隔符)

Invalid pointer addition (无效的指针相加)

Invalid use of dot (点使用错)

Macro argument syntax error (宏参数语法错误)

Macro expansion too long (宏扩展太长)

Mismatch number of parameters in definition(定义中参数个数不匹配)

Misplaced break (break位置错误)

Misplaced continue (位置错)

Misplaced decimal point (十进制小数点位置错)

Misplaced else (else 位置错)

Misplaced else driective (clse指令位置错)

Misplaced endif directive (endif指令位置错)

Must be addressable (必须是可编址的)

Must take address of memory location (必须是内存一地址)

No file name ending (无文件终止符)

No file names given (未给出文件名)

Non-protable pointer assignment (对不可移植的指针赋值)

Non-protable pointer comparison (不可移植的指针比较)

Non-protable return type conversion (不可移植的返回类型转换)

Not an allowed type (不允许的类型)

Out of memory (内存不够)

Pointer required on left side of (操作符左边须是一指针)

Redeclaration of ?xxxxxx? (?xxxxxx?重定义)

Size of structure or array not known (结构或数组大小不定)

Statement missing;(语句缺少“;”)

Structure or union syntax error (结构或联合语法错误)

Structure size too large (结构太大)

Subscription missing ] (下标缺少…]?)

Switch statement missing ( (switch 语句缺少"(")

Switch statement missing ) (switch 语句缺少")")

Too few parameters in call (函数调用参数太少)

Too few parameter in call to?xxxxxx?(调用?xxxxxx?时参数太少)

Too many cases (Cases太多)

Too many decimal points (十进制小数点太多)

Too many default cases (defaut太多)

Too many exponents (阶码太多)

Too many initializers (初始化太多)

Too many storage classes in declaration (说明中存储类太多)

Too many types in decleration (说明中类型太多)

Too much auto memory in function (函数中自动存储太多)

Too much global define in file (文件中定义的全局数据太多)

Two consecutive dots (两个连续点)

Type mismatch in parameter # (参数"#"类型不匹配)

Type mismatch in parameter # in call to ?XXXXXXX? (调用?XXXXXXX?时参数#类型不匹配)

Type missmatch in parameter ?XXXXXXX? (参数?XXXXXXX?类型不匹配)

Type mismatch in parameter ?YYYYYYYY? in call to ?YYYYYYYY?(调

用?YYYYYYY?时参数?XXXXXXXX?数型不匹配)

Type mismatch in redeclaration of ?XXX? (重定义类型不匹配)

Unable to creat output file ?XXXXXXXX.XXX? (不能创建输出文

件?XXXXXXXX.XXX?)

Unable to create turboc.lnk (不能创建turboc.lnk )

Unable to execute command ?xxxxxxxx?(不能执行?xxxxxxxx?命令)

Unable to open include file ?xxxxxxx.xxx? (不能打开包含文件?xxxxxxxx.xxx?) Unable to open inputfile ?xxxxxxx.xxx? (不能打开输入文件?xxxxxxxx.xxx?) Undefined label ?xxxxxxx? (标号?xxxxxxx?未定义)

Undefined structure ?xxxxxxxxx? (结构?xxxxxxxxxx?未定义)

Undefined symbol ?xxxxxxx? (符号?xxxxxxxx?未定义)

Unexpected end of file in comment started on line #(源文件在某个注释中意外结束) Unexpected end of file in conditional stated on line # (源文件在#行开始的条件语句中意外结束)

Unknown preprocessor directive ?xxx? (不认识的预处理指令:?xxx?)Untermimated character constant (未终结的字符常量)

Unterminated string (未终结的串)

Unterminated string or character constant(未终结的串或字符常量)

User break (用户中断)

Value required (赋值请求)

While statement missing ( (While语句漏掉?(?)

While statement missing ) (While语句漏掉?)?)

Wrong number of arguments in of ?xxxxxxxx? (调用?xxxxxxxx?时参数个数错误)

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

PIC8位单片机汇编语言常用指令的识读

PIC8位单片机汇编语言常用指令的识读(上) 各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC 系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号操作码助记符操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 二、清零指令(共4条) 1 寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2 看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

一些常用的汇编语言指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器存储器操作数传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器存储器操作数传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。 LES :同上,只是16位段基址送ES中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数,操作数不能是CS和立即数 标志操作指令 LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH 指定的位。不影响标志位。 SAHF:与上相反,把AH中的标志位传送回标志寄存器。 PUSHF:把标志寄存器内容压入栈顶。 POPF:把栈顶的一个字节传送到标志寄存器中。 CLC:进位位清零。 STC:进位位为1。 CMC:进位位取反。 CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。 STD:DF为1。 CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。 STI:IF为1。 加减运算指令

注意:对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD。 ADC:把进位CF中的数值加上去。 INC:加1指令 SUB。 SBB:把进位CF中数值减去。 DEC:减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。 乘除运算指令 MUL 操作数:无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。IMUL 操作数:有符号数乘法指令。基本与MUL相同。 DIV 操作数:被除数是在AX(除数8位)或者DX和AX(除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV:有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW,CWD:把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT:取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志) SF(符号)反映运算结果,AF(辅助进位)未定义。自己与自己AND值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1)OR 操作数1 操作数2:自己与自己OR值不变,CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志)SF(符号)反映运算结果,AF(辅助进位)未定义。她使用于将若干位置1:

汇编语言的各条指令

常用命令 数据传送指令 一通用数据传送指令 MOV指令为双操作数指令,两个操作数中不能全为内存操作数 格式:MOV DST,SRC 执行操作:dst = src 注:1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作。 格式:PUSH SRC //Word 执行操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) 注:1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。

2.入栈时高位字节先入栈,低位字节后入栈。 格式:POP DST //Word 执行操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 注:1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。 2.执行POP SS指令后,堆栈区在存储区的位置要改变。 3.执行POP SP 指令后,栈顶的位置要改变。 XCHG(eXCHanG)交换指令: 将两操作数值交换。 格式:XCHG OPR1,OPR2 //Byte/Word 执行的操作:(OPR1)<-->(OPR2) 注:1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 存储器与存储器之间不能交换数据。 二累加器专用传送指令 IN输入指令 长格式为:IN AL,PORT(字节) IN AX,PORT(字) 执行的操作:(AL)<-(PORT)(字节)

反汇编语言常用指令

内容目录 计算机寄存器分类简介 计算机寄存器常用指令 一、常用指令 二、算术运算指令 三、逻辑运算指令 四、串指令 五、程序跳转指令 ------------------------------------------ 计算机寄存器分类简介: 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。 其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。 寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。 3、指针寄存器

汇编语言常见指令

?PTR?操作符:强制类型转换 MOV BYTE PTR [BX], 20H ;1B立即数20H送DS:[BX] MOV WORD PTR [BX], 20H ;立即数20H送DS:[BX], ;00H送DS:[BX+1] 2.LEA(Load Effective Address) 设:变量X的偏移地址为1020H , (BP)=0020H 执行指令后: LEA DX, X LEA BX, [BP] ; 执行后, (DX) = 1020H ; 执行后, (BX) = 0020H 3.地址传送指令LDS,LES LDS REG16, MEM ; 从存储器取出4B,送入REG16和DS LES REG16, MEM ; 从存储器取出4B,送入REG16和ES 4.符号扩展指令CBW,CWD CBW ;将AL寄存器内容符号位扩展到AH CWD ;将AX寄存器内容符号位扩展到DX 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CBW ;(AX)= 0060H 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CWD ;(DX)= 0FFFFH,(AX)= 8060H 5.交换指令XCHG 例如,(AX)= 5678H 执行下面指令后 XCHG AH, AL ;(AX)= 7856H 6.换码指令XLAT XLAT ;AL←DS: [BX+AL] 表格的首地址事先存放在内存逻辑地址DS: BX中, AL的内容是相对于表格的位移量, 把对应内存的内容取出放在AL寄存器。 7.逻辑运算符 SHR(右移) SHL(左移) AND(与) OR(或) XOR(异或)

汇编语言实战经验

汇编语言实战经验 “ 哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%& “醒醒!” 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?―― Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本 I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情

汇编语言常用指令大全解释

常用汇编指令:MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。 LES (Load ES with pointer) 指针送寄存器和ES指令 LES REG , SRC //常指定DI寄存器 执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已. LAHF( Load AH with Flags ) 标志位送AH指令

汇编语言英文指令

汇编语言英文指令 AH&AL=AX(accumulator):累加寄存器 BH&BL=BX(base):基址寄存器 CH&CL=CX(count):计数寄存器 DH&DL=DX(data):数据寄存器 SP(Stack Pointer):堆栈指针寄存器 BP(Base Pointer):基址指针寄存器 SI(Source Index):源变址寄存器 DI(Destination Index):目的变址寄存器 IP(Instruction Pointer):指令指针寄存器 CS(Code Segm ent)代码段寄存器 DS(Data Segm ent):数据段寄存器 SS(Stack Segm ent):堆栈段寄存器 ES(Extra Segment):附加段寄存器 OF overflow flag 溢出标志操作数超出机器能表示的范围表示溢出,溢出时为1. SF sign Flag 符号标志记录运算结果的符号,结果负时为1. ZF zero flag 零标志运算结果等于0时为1,否则为0. CF carry flag 进位标志最高有效位产生进位时为1,否则为0. AF auxiliary carry flag 辅助进位标志运算时,第3位向第4位产生进位时为1,否则为0. PF parity flag 奇偶标志运算结果操作数位为1的个数为偶数个时为1,否则为0. DF direction flag 方向标志用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大. IF interrupt enable flag 中断允许标志IF=1时,允许CPU响应可屏蔽中断,否则关闭中断. TF trap flag 陷阱标志用于调试单步操作

(完整版)汇编语言中常用的伪指令档

汇编语言中常用的伪指令 分类:软件相关2013-01-23 20:13 515人阅读评论(0) 收藏举报areaequ伪指令常用汇编语言 汇编语言中,指令语句在源程序汇编时会产生可供计算机执行的指令代码,即目标代码。汇编程序除指令语句外,还需要提供一些指令,用于辅助源程序的汇编。比如指定程序或数据存放的起始地址,为数据分配一段连续的内存单元等。这些指令在汇编时并不生成目标代码,不影响程序执行,因此称之为伪指令。本文简单总结了常用的伪指令,如下。 1、EQU(Equate) 一般格式为:标号:EQU 操作数 指令功能为将操作数赋予标号,两边的值完全相等。使用EQU伪指令给一个标号赋值后,此标号在整个源文件中值固定。 AREA: EQU 1000H ;将标号AREA赋值为1000H 2、ORG(Origin) 一般格式为:ORG xxxxH(绝对地址或标号) XxxxH决定此语句后第一条指令(或数据)的地址。该段源程序或数据被连续存放在此后的地址内,直到下一条ORG指令为止。 ORG 8000H ;此后目标代码存储在存储器中以0x8000h开始的地址空间中。 ADD R1,#1 MOV R2, #2 3、DB(Define Byte) 一般格式为:标号:DB 字节常数或字符或表达式 标号字段可有可无,字节常数或字符是指一个字节数据。此伪指令的功能是把字节常数或字节串存放至内存连续的地址空间中。 ORG 8000H DATA1:DB 43H,09H,08H DATA2:DB 07H 伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。 注:DW(Define Word)指令定义与DB类似,区别在于DW定义一个字,DB定义一个字节。

汇编语言常用语句一览

汇编语言常用语句一览 一、数据传输指令 ──────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1.通用数据传送指令. MOV传送字或字节. MOVSX先符号扩展,再传送. MOVZX先零扩展,再传送. PUSH把字压入堆栈. POP把字弹出堆栈. PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP交换32位寄存器里字节的顺序 XCHG交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX) XADD先交换再累加.(结果在第一个操作数里) XLAT字节查表转换.──BX指向一张256字节的表的起点,AL 为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]->AL) 2.输入输出端口传送指令. IN I/O端口输入.(语法:IN累加器,{端口号│DX}) OUT I/O端口输出.(语法:OUT{端口号│DX},累加器) 输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535. 3.目的地址传送指令. LEA装入有效地址.例:LEA DX,string;把偏移地址存到DX. LDS传送目标指针,把指针内容装入DS.例:LDS SI,string;把段地址:偏移地址存到DS:SI. LES传送目标指针,把指针内容装入ES.例:LES DI,string;把段地址:偏移地址存到ES:DI. LFS传送目标指针,把指针内容装入FS.例:LFS DI,string;把段地址:偏移地址存到FS:DI. LGS传送目标指针,把指针内容装入GS.例:LGS DI,string;把段地址:偏移地址存到GS:DI. LSS传送目标指针,把指针内容装入SS.例:LSS DI,string;把段地址:偏移地址存到SS:DI. 4.标志传送指令. LAHF标志寄存器传送,把标志装入AH. SAHF标志寄存器传送,把AH内容装入标志寄存器. PUSHF标志入栈.

汇编语言常用指令大全

1.通用数据传送指令. MOV----> move MOVSX---->extended move with sign data MOVZX---->extended move with zero data PUSH---->push POP---->pop PUSHA---->push all POPA---->pop all PUSHAD---->push all data POPAD---->pop all data BSWAP---->byte swap XCHG---->exchange CMPXCHG---->compare and change XADD---->exchange and add XLAT---->translate 2.输入输出端口传送指令. IN---->input OUT---->output 3.目的地址传送指令. LEA---->load effective address LDS---->load DS LES---->load ES LFS---->load FS LGS---->load GS LSS---->load SS 4.标志传送指令. LAHF---->load AH from flag SAHF---->save AH to flag PUSHF---->push flag POPF---->pop flag PUSHD---->push dflag POPD---->pop dflag 二、算术运算指令 ADD---->add ADC---->add with carry INC---->increase 1 AAA---->ascii add with adjust DAA---->decimal add with adjust SUB---->substract SBB---->substract with borrow DEC---->decrease 1 NEC---->negative CMP---->compare

反汇编语言常用指令

1 / 33 内容目录 计算机寄存器分类简介 计算机寄存器常用指令 一、常用指令 二、算术运算指令 三、逻辑运算指令 四、串指令 五、程序跳转指令 ------------------------------------------计算机寄存器分类简介: 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为: 2 / 33 AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。4个

16位寄存器又可分割成8个独立的8位寄存器(AX: AH-AL、BX: BH-BL、CX: CH-CL、DX: DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

汇编语言常见指令

“PTR”操作符:强制类型转换 MOV BYTE PTR [BX], 20H ;1B立即数20H送DS:[BX] MOV WORD PTR [BX], 20H ;立即数20H送DS:[BX], ;00H送DS:[BX+1] 2.LEA(Load Effective Address) 设:变量X的偏移地址为1020H , (BP)=0020H 执行指令后: LEA DX, X LEA BX, [BP] ; 执行后, (DX) = 1020H ; 执行后, (BX) = 0020H 3.地址传送指令LDS,LES LDS REG16, MEM ; 从存储器取出4B,送入REG16和DS LES REG16, MEM ; 从存储器取出4B,送入REG16和ES 4.符号扩展指令CBW,CWD CBW ;将AL寄存器容符号位扩展到AH CWD ;将AX寄存器容符号位扩展到DX 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CBW ;(AX)= 0060H 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CWD ;(DX)= 0FFFFH,(AX)= 8060H 5.交换指令XCHG 例如,(AX)= 5678H 执行下面指令后 XCHG AH, AL ;(AX)= 7856H 6.换码指令XLAT XLAT ;AL←DS: [BX+AL] 表格的首地址事先存放在存逻辑地址DS: BX中, AL的容是相对于表格的位移量, 把对应存的容取出放在AL寄存器。 7.逻辑运算符 SHR(右移) SHL(左移) AND(与) OR(或) XOR(异或)

汇编语言各种指令解释及用法

【数据传输指令】 一、通用数据传送指令 1、传送指令MOV (move) 指令的汇编格式:MOV DST,SRC 指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址。 指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。指令的执行对标志位的影响:不影响标志位。 指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器; 目的操作数DST不能是CS,也不能用立即数方式。 2、进栈指令PUSH (push onto the stack) 出栈指令 POP (pop from the stack) 指令的汇编格式:PUSH SRC ;POP DST 指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC) POP DST (DST)<-((SP));(SP)<-(SP) 指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。 指令对标志位的影响:PUSH 和 POP指令都不影响标志位。 指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2; POP指令的DST不允许是CS寄存器; 3、交换指令XCHG (exchange) 指令的汇编格式:XCHG OPR1,OPR2 指令的基本功能:(OPR1)<->(OPR2) 指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。指令对标志位的影戏:不影响标志位。 指令的特殊要求:不允许使用段寄存器。 二、累加器专用传送指令 4、输入指令IN (input) 输出指令 OUT (output) 指令的汇编格式:IN ac,port port<=0FFH IN ac,DX port>0FFH OUT port,ac port<=0FFH OUT DX,ac port>0FFH 指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O 端口,因此,IN和OUT指令都要指出I/O端口地址。 IN ac,port port<=0FFH (AL)<-(port)传送字节或 (AX)<-(port+1,port)传送字 IN ac,DX port>0FFH (AL)<-((DX))传送字节或 (AX)<-((DX)+1,(DX))传送字 OUT port,ac port<=0FFH (port)<-(AL)传送字节或 (port+1,port)<-(AX)传送字 OUT DX,ac port>0FFH (DX)<-(AL)传送字节或 ((DX)+1,(DX))<-(AX)传送字 指令对标志位的影响:不影响标志位。指令的特殊要求:只限于在AL或AX与I/O端口之间传送信息。传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。 5、换码指令XLAT (translate)

相关主题
文本预览
相关文档 最新文档