- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机系统 I ;计算机的代码是由‘0’,‘1’组成 …
0001110010000110
程序员使用机器语言编程非常困难,采用助记符号的形式来表示每条指令将会更好…,和机器码的转换也比较容易
ADD R6,R2,R6 ; increment index reg.
;汇编器(Assembler)是将符号语言翻译成机器指令的程序。
汇编器是和机器的ISA是相关的:符号与指令集定义的指令保持相应的一致性
用容易记忆的符号表示操作码
内存的位置用标号表示
为存储分配和数据的初始化提供额外的操作支持
;;
; Program to multiply a number by the constant 6
;
.ORIG x3050
LD R1, SIX
LD R2, NUMBER
AND R3, R3, #0 ; Clear R3. It will
; contain the product.
; The inner loop
;
AGAIN ADD R3, R3, R2
ADD R1, R1, #-1 ; R1 keeps track of
BRp AGAIN ; the iteration.
;
HALT
;
NUMBER .BLKW 1
SIX .FILL x0006
;
.END;程序代码的组成:
可执行的机器指令
伪操作指令(传递给编译器指导汇编工作,不可执行)
注释
符号之间加入空格 ,不区分字母的大小写
注释 (“;”开始),汇编器将忽略所有的注释
指令格式:标号 操作码 操作数 ;注释
;操作码
和LC-3指令集定义的操作码对应的助记符号,不能再用作标号,系统专用并保留
具体参见Appendix A
ex: ADD, AND, LD, LDR, …
操作数
寄存器数– 寄存器 Rn, n是寄存器编号
立即数 – 数字用 # (十进制) or x (十六进制)表示
内存数 – 标号,用符号表示的内存地址
用‘,’分割操作数
数字, 操作数的顺序以及类型和遵守机器码指令的定义;
ADD R1,R1,R3ADD R1,R1,#3LD R6,NUMBERBRz LOOP
;LC-3 只有两种基本数据类型
定点整数: Integer 16位补码
字符: Character 16位
都占用 16 bits wide (a word)
但实际字符只占用8 bit, 怎么存储?
高位零扩展;标号:Label
放在每行代码的开始的地址符号,表示该行代码或数据的地址,
符号化的内存地址. 一般两种类型:
分支和跳转语句的目标地址
数据的存放地址
ex: LOOP ADD R1,R1,#-1 BRp LOOP
ex: LD R2, NUMBER
…
…
NUMBER .BLKW 1
;注释:Comment
‘;’之后的所有字符都是注释
汇编器将忽略所有的注释
注释用于帮助程序员理解程序和存档的需求
注释的技巧
不要滥用注释, 比如 ???R1加1”,没有提供比指令更多的信息
提供更深的洞察力, 比如 “指针加1指向下一个访问的数据”
分隔代码片段
;伪操作
不对程序产生效果,不是执行指令
仅供汇编器使用
区别于指令,以‘.’ 开始;告诉编译器代码在内存中的起始地址
一个程序只允许一个 .ORIG伪操作
PC 在程序载入时初始化为.ORIG指向的地址
Example:
.ORIG x3000
LC-3的用户程序的起始地址一般设置为 x3000
LC-3:内存分配
x0000 ? x00FF :TRAP向量表
x0100 ? x01FF 中断向量表
x0200 ? x2FFF 系统STACK
x3000 ? xFDFF 用户程序区域
xFE00 ? xFFFF 设备寄存器
;在内存中定义并初始化程序变量,可读写
一个程序行只允许一个定义
定义变量的大小总是16位的字
;用于内存单元的分配,适用操作数一开始不确定的场合
; 保留3个未命名的内存单元
.BLKW 3
; 保留1个命名的内存单元
Bob .BLKW 1
; 保留7个命名的内存单元并全部
; 初始化为4
num .BLKW 7 #4;在内存中定义1串字符串
在内存中连续存放
自动以‘\0’结束
哨兵: “Null-terminated”
每个字符高位0扩展,占用16位
Example:
hello: .STRINGZ “Hello!”
访问:
LEA R0, hello
PUTS;告诉编译器程序结束的地点
一个程序只允许一个.END
编译器在此停止编译,但不真正停止程序;int a;
文档评论(0)