中国手机最好的网站排名,电商系统app开发,那个网站攻略做的好,英国做网站的人ALIGN
ALIGN expression ALIGN 语句将位置计数器设置为下一个地址模 2^表达式。 这可用于确保下一条语句在 2^n 边界上对齐。例如#xff0c;对齐缓存行中的代码或数据。如有必要#xff0c;汇编程序会创建一个间隙。间隔字节的内容因各个部分而异#xff1a;
在data中未定…ALIGN
ALIGN expression ALIGN 语句将位置计数器设置为下一个地址模 2^表达式。 这可用于确保下一条语句在 2^n 边界上对齐。例如对齐缓存行中的代码或数据。如有必要汇编程序会创建一个间隙。间隔字节的内容因各个部分而异
在data中未定义。在const中的0。在code中的 NOP。
该段需要至少使用与 ALIGN 语句中使用的对齐方式相同的对齐方式进行声明。
Example MYDATA: SEGMENT EDATA ALIGN(6)RSEG MYDATA
var1: DSB 1ALIGN 5 ; align to 32 byte boundary
var2: DSW 1ORG
ORG expression ORG 语句更改当前段的位置计数器并为后续语句设置新的原点。表达式必须是没有前向引用的简单可重定位表达式。只能使用当前段中的绝对地址或符号值。表达式中可以使用美元符号字符 ‘$’表示位置计数器的当前值。
遇到 ORG 语句时汇编程序将计算表达式的值并更改位置计数器。
如果 ORG 语句出现在绝对段中则会为位置计数器分配指定的绝对地址值。位置计数器不能设置为低于分段基址的地址。如果 ORG 语句出现在可重定位段中则会为位置计数器分配指定表达式的偏移量。例如如果可重定位段从地址 1000h 开始并且 ORG表达式的值为 1234h则下一条语句的绝对地址为 2234h 1000h 1234h。
ORG 语句更改位置计数器这可能会产生间隙但不会创建新段。
注意
可以使用 ORG语句更改位置计数器并覆盖或覆盖现有代码或数据。之所以支持此功能是因为旧程序使用此技术在同一物理地址上定义多个变量。如果以这种方式使用ORG 语句则不会生成警告。
ORG 100h
ORG RESTART
ORG EXIT1
ORG ($ 15) AND 0FFF0hRSEG
RSEG segment RSEG 语句选择以前使用 SEGMENT 语句声明的可重定位段。
MYPROG SEGMENT CODE ; Declare the segmentRSEG MYPROG ; Select the segmentCSEG
CSEG 〚AT address〛 CSEG 语句在 CODE 空间中选择一个绝对段。
如果包含可选地址则汇编程序将从该地址启动绝对段。有效地址范围为 0000h-0FFFFh。
如果省略可选地址汇编程序将从地址 0 开始绝对段如果未定义先前的绝对 CODE 段。如果先前定义了绝对 CODE 段则汇编程序将从该段的末尾继续。
注意
起始地址必须是绝对表达式。AX51 汇编程序将 CSEG 语句转换为以下内容
?CO?modulename?n SEGMENT OFFS addressUSING
USING expression USING 语句指定使用哪个寄存器bank(0-3 对 AR0-AR7 寄存器进行编码。选定的寄存器bank在目标文件中记录内存区域由链接器保留。
一些 8051指令如 PUSH 和 POP只允许使用绝对地址。汇编器将绝对寄存器AR0-AR7替换为当前寄存器bank中寄存器的物理地址。当指令 PUSH R0 无效时PUSH AR0 有效。但是汇编程序必须知道使用哪个寄存器bank来计算正确的物理地址。这就是 USING 语句的目的。
USING 语句不会生成任何代码来切换当前寄存器bank。汇编程序必须选择正确的寄存器库。例如以下代码选择注册bank2
PUSH PSW ; save the current register bank
MOV PSW, #(2 SHL 3) ; set register bank 2
.
.
.
POP PSW ; restore saved register bank物理地址的计算方法如下
(register bank × 8) register注意
请仔细使用 EQU 语句定义绝对寄存器 AR0-AR7 的符号。符号值在定义时计算而不是使用时。如果随后使用 USING 语句更改了寄存器库则定义的符号将具有不正确的地址并且生成的代码可能会失败。
USING 3 ; select register bank 3
PUSH AR2 ; push R2 in bank 3 (address 1Ah)USING 1 ; select register bank 1
PUSH AR7 ; push R7 in bank 1 (address 1Fh)_ERROR_
_ERROR_ text __ERROR__语句使用指定的文本生成错误消息。
IF VARLEN 10__ERROR__ Variable Length is Too Long
ENDIF_WARNING_
_WARNING_ text __WARNING__语句使用指定的文本生成警告消息。
IF VARLEN 10__WARNING__ Variable Length is Too Long
ENDIFCODE
symbol CODE address CODE 语句将address在 0000h-0FFFFh 范围内分配给指定的symbol 。不能重新定义symbol 。
CO_START CODE 00000h
CO_END CODE 0FFFFhIVECT_0 CODE 00003h
IVECT_1 CODE 0000Bh
IVECT_2 CODE 00013h