学习STM8汇编指令或汇编语言时会碰到很多符号,吃不准这些符号代表什么意思,很难透彻地理解STM8汇编指令或汇编语句的含义,下面做了个归纳汇总,方便大家对照查阅。
汇编语言符号集锦
Nr. | 符号 | 英文 名称 |
功能 描述 |
举例 说明 |
1 | , | comma | 分隔两个参数 | LDF A,($555555,X) |
2 | ; | semicolon | 注释,编译时被忽略 | ld ioport,x ; x存入ioport |
3 | .b | byte | 强制一个byte长度 | count ds.b ; byte-size label |
4 | .w | word | 强制word两bytes长度 | bytes ; 强制了字节大小 lab ds.w ; 字节大小的两字节lab |
5 | .l | long | 强制long四bytes长度 | segment byte at 4000 'RAM' lab DS.L ; 字节大小的四字节lab |
6 | .e | extended | 扩展24位间接寻址模式 | ldf A,([$1000.e],X) |
7 | $ | hexadecimal | MOTOROLA十六进制 | ld A,$ffff |
8 | & | ampersand |
Motolola16进制,同$ |
$ABCD or &ABCD |
9 | & | ampersand | 使预处理器识别参数 | dc.w param label¶m:nop ;如果param等于1, ;label¶m:nop, 就是label1:nop |
10 | # | pound key | 立即操作数 | ld A,#1;十进制1赋给A ld A,#$ff;十六进制ff赋给A |
11 | # | pound key | 立即位操作数 |
bset mem,#3 ;将mem的第3位置位 btjt mem,#3, label ;如果mem的第3位为1则跳转 |
12 | # | pound key | 条件汇编 | #IF {count eq 1};如count等于1 |
13 | # | pound key | 包含外部资源 | #include "mapping.inc" |
14 | * | asterisk | 乘MULT | a * b |
15 | * | asterisk | 程序计数器PC当前值 | lab01 jra * |
16 | * | asterisk | 字符* | ld A , #’*’ |
17 | { } | Arithmetic brackets | 算术大括弧 |
DS.W {SIZE+1} DC.L {10 mult val} ;算术表达式要括起来 |
18 | { } | Arithmetic brackets | 括起来区分字节位置 |
lab1 equ $112233 ld A,#{low{seg lab1}} ;lab1/65536 = $11 => A ld A,#{high lab1}; $22 => A ld A,#{low lab1}; $3 => A |
19 | [ ] | brackets | 被括内容是指针 |
LD [$1004],A ;把A赋给$1004所存内容所指向的地址,如果$1004存的是0x00,A的值存入0x00的位置 CLR ([$1234.w],X) ;M( M($1234).w + X ) ←0x00, $1234.w包含的内容加上X所指向的地址内容清零 |
20 | ( ) | parenthesis | 变址访问模式 |
ADDW X,($12,SP) ; X ← X + M(SP+$12) 把SP+$12中一个字的内容累加到X中 |
21 | " " | double quotes | ASCII字符串常量 |
STRING “HELLO” DC.B “HELLO” |
22 | ' ' | single quotes | ASCII字符常量
|
ld A,#’*’ ‘AB’ $4142 ‘\b’ $7F backspace |
23 | ' ' | single quotes | segment Class类型 | segment 'ram1' ;定义ram1类型 var ds.w 1 ;定义ram1类型的变量 |
24 | : | colon | segment combine 类型之一:at:X[-Y] |
segment byte at:8000-BFFF 'eprom' |
25 | : | colon | 代码段标签起始 |
label1:nop |
26 | % | percent | 二进制 | %100 ;二进制100 |
27 | % | percent | 输出字符串到控制台 | %OUT hello! |
28 | ~ | negated | 取反 | -a ;negated a |
29 | / | slash | 指令集归属范围 |
st7/ 或 st8/ |
30 | / | slash | DIV |
DC.L {var/8} |
31 | \ | backslash | 转义字符 | ‘\t’ $09 tabulation |
32 | + | plus | 加 |
a+b ;a plus b #define SIZE 128 |
33 | - | minus | 减 |
a-b ; a minus b |
34 | - | strike | 范围中划线 | segment byte at:8000-BFFF 'eprom' |
Nr. 符号 英文来源 功能描述 举例
1 , comma 隔开指令的两个参数 LDF A,($555555,X)
2 ; semicolon 注释,编译时被忽略 ld ioport,x ; store into ioport
3 .b byte 强制一个byte长度 count ds.b ; byte-size label
4 .w word 强制word两bytes长度
bytes ; 强制了字节大小
lab ds.w ; 字节大小的两字节lab
5 .l long 强制long四bytes长度
segment byte at 4000 'RAM'
lab DS.L ; 字节大小的四字节lab
6 .e extended 扩展24位间接寻址模式 ldf A,([$1000.e],X)
7 $ hexadecimal MOTOROLA十六进制 ld A,$ffff
8 # pound key 立即操作数
ld A,#1;十进制1赋给A
ld A,#$ff;十六进制ff赋给A
立即位操作数
bset memory,#3;将#3位置位
btjt memory,#3, label
;如果#3位为1则跳转
条件汇编 #IF {count eq 1};如count等于1 包含外部资源 #include "mapping.inc"
9 * asterisk 乘MULT a * b 程序计数器PC当前值 lab01 jra * 字符* ld A , #’*’
10 { } Arithmetic brackets 算术大括弧
DS.W {SIZE+1}
DC.L {10 mult val}
;算术表达式要括起来
括起来区分字节位置
lab1 equ $112233
ld A,#{low{seg lab1}}
;lab1/65536 = $11 => A
ld A,#{high lab1}; $22 => A
ld A,#{low lab1}; $3 => A
11 [ ] brackets 被括内容是指针
LD [$1004],A
;把A赋给$1004所存内容所指向的地址,如果$1004存的是0x00,A的值存入0x00的位置
CLR ([$1234.w],X)
;M( M($1234).w + X ) ←
0x00,$1234.w包含的内容加上X所指向的地址内容清零
12 ( ) parenthesis 变址访问模式
ADDW X,($12,SP)
; X ← X + M(SP+$12) 把SP+$12中一个字的内容累加到X中
13 " " double quotes ASCII字符串常量
STRING “HELLO”
DC.B “HELLO”
14 ' ' single quotes ASCII字符常量
ld A,#’*’
‘AB’ $4142
‘\b’ $7F backspace
‘\f’ $0C formfeed
‘\n’ $0A linefeed
‘\r’ $0D carriage return
‘\t’ $09 tabulation
‘\\’ $5C slash
‘\’ $27 single-quote
‘\0’ $00 null
‘\”’ $22 double-quote
segment Class类型 segment 'ram1' ;ram1类型
var3 ds.w 1
15 :
colon
segment combine
类型之一:at:X[-Y]
segment byte at:8000-BFFF 'eprom'
label1:nop
16 % percent 二进制 %100 输出字符串到控制台 %OUT hello!
17 ~ negated 取反 -a negated a
18 / slash 指令集归属范围
st7/ 或 st8/
DIV DC.L {var/8}
19 & ampersand
Motolola
十六进制,和$一样
$ABCD or &ABCD ;HEX 使预处理器可识别参数
dc.w param
label¶m:nop
;如果param等于1,
;label¶m:nop
;就是label1:nop
20 \ backslash 转义字符 ‘\t’ $09 tabulation
21 + plus 加
a+b ;a plus b
#define SIZE 128
DS.W {SIZE+1} ; OK
#IF {SIZE eq 1} ; OK
#ENDIF
22 - minus 减
a-b ; a minus b
23 - strike 范围中划线 segment byte at:8000-BFFF 'eprom'