Microsoft PowerPoint - sicp05-1.ppt

Size: px
Start display at page:

Download "Microsoft PowerPoint - sicp05-1.ppt"

Transcription

1 5. 寄存器机器的计算 (1) 本书的最后一章讨论更底层的计算, 以及从抽象层的程序 ( Scheme 程序 ) 到底层程序的翻译 ( 编译 ) 本节课的内容 : 寄存器机器 描述寄存器机器的计算过程 寄存器机器语言 子程序和递归带来的问题 寄存器机器语言的模拟器 ( 解释器 ) 模拟器的实现 程序设计技术和方法裘宗燕, (1) 求值器的控制和寄存器机器 前面研究了计算 ( 过程 ) 和用 Scheme 的过程描述计算的各方面问题, 提出了几个求值模型, 解释过程的意义 代换模型 环境模型 元循环模型 元循环模型表现出求值过程的许多细节, 但仍然有些遗漏, 主要是没解释 Scheme 系统里的基本控制动作, 如 求出子表达式的值之后如何把它送给使用值的表达式? 为什么有些递归过程会产生迭代型计算过程 ( 只需要常量空间 ), 而另一些却产生递归型计算过程 ( 需要线性以上的空间 )? 原因 : 求值器是 Scheme 程序, 它继承并利用了基础系统的结构 要进一步理解 Scheme 求值器的控制, 必须转到更低层面, 研究更多实现细节 最后一章的工作考虑这些问题 程序设计技术和方法裘宗燕, (2)

2 寄存器机器 下面基于常规计算机 ( 寄存器机器 ) 基本操作描述计算, 寄存器机器的功能是顺序地执行一条条指令, 操作一组存储单元 ( 寄存器 ) 典型的寄存器机器指令, 就是把一个操作应用于几个寄存器的内容, 并把操作的结果存入某个寄存器 基于这种操作描述的计算过程就像典型的机器指令程序 这里不涉及具体机器, 还是研究一些 Scheme 过程 要考虑为每个过程设计一部特殊的寄存器机器 第一步工作像是设计一种硬件体系结构, 其中将 : 开发一些机制支持各种重要程序结构, 如递归 过程调用等 设计一种描述寄存器机器的语言 做一个 Scheme 程序来解释用这种语言描述的机器 这部机器中的多数操作都很简单, 可以用简单的硬件执行 程序设计技术和方法裘宗燕, (3) 寄存器机器 为了实现 Scheme 解释器, 还需要考虑表结构的表示和处理 需要实现基本的表操作 实现作为运行基础的巧妙的存储管理机制 后面讨论有关的基础技术 ( 可能简单介绍 ) 有了基本语言和存储管理机制之后, 就可以做出一部机器, 它能 实现前面的元循环解释器 而且为解释器的细节提供了清晰的模型 这一章的最后讨论和实现了一个编译器 把 Scheme 语言程序翻译到这里的寄存器机器语言 还支持解释代码和编译代码之间的连接, 支持动态编译等 由于时间关系, 后面部分不讲了 有兴趣的同学自己阅读, 有问题可以给我发邮件, 或以其他方式讨论 程序设计技术和方法裘宗燕, (4)

3 设计寄存器机器 寄存器 检测, 其结果影响控制器的活动 寄存器机器包含数据通路 ( 寄存器和操作 ) 和确定操作顺序的控制器 过程 ( 以 GCD 算法为例 ) 的机器 : (define (gcd a b) 把余数送入寄存 (if (= b 0) 器 t 的按钮 受 a 控制器的控制 (gcd b (remainder a b)))) 执行这个算法的机器必须维护 a 和 b 的轨迹, 假定值存在寄存器 a 和 b 常量, 值不变 所需操作 : 判断 b 是否 0, 计算 a 除以 b 的余数 ( 假定有计算设备 ) 每一次循环迭代需要同时更新 a 和 b 由于一条简单指令只能更新一个寄存器, 因此引进了辅助寄存器 t 根据上述分析做出的数据通路见图 程序设计技术和方法裘宗燕, (5) 设计寄存器机器 为使寄存器机器能正确工作, 必须正确控制其中各按钮的开闭顺序 下左图是 GCD 机器的控制器, 用流程图表示 : 方框是动作, 菱形框是判断 控制按箭头方向运行, 进入判断后的流向由数据通路图中的检测决定 控制到达 done 时工作结束 对这个 GCD 机器, 控制到达 done 时寄存器 a 里存着算出的 GCD 值 程序设计技术和方法裘宗燕, (6)

4 描述寄存器机器的语言 用图形容易描述很小的机器, 但很难用于描述大型机器 为方便使用, 下面考虑一种描述寄存器机器的文本语言 一种直观的设计是提供两套描述, 分别描述数据通路和控制器 数据通路描述 : 寄存器和操作, 包括命名寄存器, 寄存器赋值按钮 ( 也要命名 ) 以及受控数据传输的数据源 ( 寄存器 / 常量 / 操作 ) 还要给操作命名, 并说明其输入 控制器是指令序列, 加上一些表示控制入口点的标号 指令可以是 : 数据通路的一个按钮 : 指定寄存器赋值动作 test 指令 : 完成检测 条件转跳指令 (branch): 基于前面检测结果, 检测为真时转到指定标号的指令 ; 检测为假时继续下一条指令 无条件转跳指令 (goto), 转到指定标号的指令执行 标号作为 branch 和 goto 的目标 程序设计技术和方法裘宗燕, (7) (data-paths 描述寄存器机器的语言用所定义语言描述的 GCD 机器 (registers ((name a) (buttons ((name a<-b) (source (register b))))) ((name b) (buttons ((name b<-t) (source (register t))))) ((name t) (buttons ((name t<-r) (source (operation rem)))))) (operations ((name rem) (inputs (register a) (register b))) ((name =) (inputs (register b) (constant 0))))) 描述很难读 : 要理解控制器的指令序列, 需要仔细对照数据通路按钮和操作名 一种改进是融合数据通路和控制器描述, 指令里直接描述操作 (controller ; 改造后的控制器代码 (controller test-b test-b ;label (test(op=)(regb)(const0)) (test =) ; test (branch (label gcd-done)) ; conditional branch (branch (label gcd-done)) (t<-r) ; button push (assign t (op rem) (reg a) (reg b)) (a<-b) ; button push (assign a (reg b)) (b<-t) ; button push (assign b (reg t)) (goto (label test-b)) ; unconditional branch (goto (label test-b)) gcd-done) ; label gcd-done) 程序设计技术和方法裘宗燕, (8)

5 寄存器机器语言 改造后的语言更清晰, 但仍然有些缺点, 如 : 比较罗嗦, 如果指令里多次提到某数据通路元素, 就要多次写出其完整描述 ( 上例简单, 没出现 ) 这使实际数据通路结构不够清晰, 看不清有多少寄存器 / 操作 / 按钮, 及其互连关系 用 Scheme 表达式表示指令, 实际上这里只能写合法指令 虽然有些缺点, 下面还是准备用这套寄存器机器语言 例 : 修改前面的 GCD 机器, 使得能给它输入想求 GCD 的数, 并能打印出计算结果 这里不准备研究读入 / 输出操作的实现 只假定有两个基本操作 read 产生可存入寄存器的值值来自机器之外 print 给环境产生某种效果图形上给 print 关联一个按钮按压导致 print 执行 指令形式为 (perform (op print) (reg a)) 程序设计技术和方法裘宗燕, (9) 寄存器机器语言 (controller gcd-loop (assign a (op read)) (assign b (op read)) test-b (test (op =) (reg b) (const 0)) (branch (label gcd-done)) (assign t (op rem) (reg a) (reg b)) (assign a (reg b)) (assign b (reg t)) (goto (label test-b)) gcd-done (perform (op print) (reg a)) (goto (label gcd-loop))) 扩充后的机器的数据通路 扩充后的 GCD 机器控制器 工作过程 : 反复读入一对对数值, 求出两个数的 GCD 并输出 程序设计技术和方法裘宗燕, (10)

6 机器设计的抽象 一部机器的定义总是基于一组基本操作, 有些操作本身很复杂 有可能把 Scheme 环境提供的操作作为基本操作 基于复杂的操作定义机器, 可以 o 把注意力集中到某些关键方面, 隐藏不关心的细节 o 必要时再基于更基本的操作构造这些操作, 说明它们可实现 例如,GCD 机器的一个操作是计算 a 除以 b 的余数赋给 t 如果希望机器不以它为基本操作, 就需要考虑基于更简单的操作计算余数 例如, 可以只用减法写出求余数过程 (define (remainder n d) (if (< n d) n (remainder (- n d) d))) 即, 可以用一个减法操作和一个比较代替前面机器里的求余数 程序设计技术和方法裘宗燕, (11) 机器设计的抽象 新 GCD 控制器代码 ( 用减法实现求余 ) (controller test-b (test (op =) (reg b) (const 0)) (branch (label gcd-done)) (assign t (reg a)) rem-loop (test(op<)(regt)(regb)) (branch (label rem-done)) (assign t (op -) (reg t) (reg b)) (goto (label rem-loop)) rem-done (assign a (reg b)) (assign b (reg t)) (goto (label test-b)) gcd-done) 把原来的一条指令 : (assign t (op rem) (reg a) (reg b)) 代换为上面绿色指令序列, 它又形成循环 新 GCD 机器的数据通路和控制器 程序设计技术和方法裘宗燕, (12)

7 子程序 直接代入基于更基本操作的结构, 可能使控制器变得非常复杂 希望做出某种安排, 维持机器结构的简单性, 而且避免重复的结构 例 : 如果机器两次用 GCD, 分别算 a 与 b 的和 c 与 d 的 GCD, 数据通路将包含两个 GCD 块, 控制器也包含两段类似代码 ( 很不令人满意 ) 用 GCD 两次的控制器代码片段 : gcd-1 (test(op=)(regb)(const0)) (branch (label after-gcd-1)) (assign t (op rem) (reg a) (reg b)) (assign a (reg b)) (assign b (reg t)) (goto (label gcd-1)) after-gcd gcd-2 (test(op=)(regd)(const0)) (branch (label after-gcd-2)) (assign s (op rem) (reg c) (reg d)) (assign c (reg d)) (assign d (reg s)) (goto (label gcd-2)) after-gcd-2 程序设计技术和方法裘宗燕, (13) 子程序 出现重复部分很不经济 现在考虑如何只用一个 GCD 部件实现 如果再算 GCD 时寄存器 a 和 b 里的值没用了 ( 有用时可把它们移到其他寄存器 ), 就可以修改机器 再次算 GCD 之前先把相应的值移到 a 和 b, 然后用同一个 GCD 通路做第二次计算 节约了一个 GCD 通路 控制器代码片段如右 两代码片段差不多, 只是入口 / 出口标号不同 还有些重复的控制器代码 下面考虑如何进一步简化 gcd-1 (test(op=)(regb)(const0)) (branch (label after-gcd-1)) (assign t (op rem) (reg a) (reg b)) (assign a (reg b)) (assign b (reg t)) (goto (label gcd-1)) after-gcd ;; 这里把求 GCD 的数据移入 a 和 b gcd-2 (test(op=)(regb)(const0)) (branch (label after-gcd-2)) (assign t (op rem) (reg a) (reg b)) (assign a (reg b)) (assign b (reg t)) (goto (label gcd-2)) after-gcd-2 程序设计技术和方法裘宗燕, (14)

8 子程序 想法 : 调用 GCD 代码前把一个寄存器 ( 如 continue) 设置为不同的值, 在 GCD 代码的出口根据该寄存器跳到正确位置 得到的代码如右边所示, 其中只有一段计算 GCD 的代码 这种技术可满足本程序需要 ( 一段代码, 正确返回 ) 但如果程序里有许多 GCD 计算, 代码会变得很复杂, 难写 / 难维护 需要考虑一种通用实现模式 ( 想想怎么办?) 下面想法基于代码指针, 也就是在寄存器里保存控制信息 gcd (test(op=)(regb)(const0)) (branch (label gcd-done)) (assign t (op rem) (reg a) (reg b)) (assign a (reg b)) (assign b (reg t)) (goto (label gcd)) gcd-done (test (op =) (reg continue) (const 0)) (branch (label after-gcd-1)) (goto (label after-gcd-2)) ;; Before branching to gcd from the ;; first place where it is needed, ;; we place 0 in the continue register (assign continue (const 0)) (goto (label gcd)) after-gcd-1 ;; Before the second use of gcd, ;; we place 1 in the continue register (assign continue (const 1)) (goto (label gcd)) after-gcd-2 程序设计技术和方法裘宗燕, (15) 子程序 关键想法 : 用寄存器 continue 保存返回地址,GCD 代码最后总按它的内容转跳 代码如右 扩充 goto 指令功能 : 参数是标号时 ( 直接 ) 跳 参数是寄存器时跳到其中保存的标号 ( 寄存器间接跳 ) 实现了子程序和子程序调用 如果多个子程序调用相互无关, 就可以共用同一 continue 寄存器 如果子程序里还有子程序调用, 就需要多个 continue 寄存器 ( 否则会丢失外层调用的返回标号 ) 这个问题下面一起解决 gcd (test(op=)(regb)(const0)) (branch (label gcd-done)) (assign t (op rem) (reg a) (reg b)) (assign a (reg b)) (assign b (reg t)) (goto (label gcd)) gcd-done (goto (reg continue)) ;; Before calling gcd, we assign to ;; continue the label to which gcd ;; should return. (assign continue (label after-gcd-1)) (goto (label gcd)) after-gcd-1 ;; Here is the second call to gcd, ;; with a different continuation. (assign continue (label after-gcd-2)) (goto (label gcd)) after-gcd-2 程序设计技术和方法裘宗燕, (16)

9 实现递归 实现递归计算过程, 还需要另外机制 考虑阶乘 : (define (factorial n) (if (= n 1) 1 (* (factorial (- n 1)) n))) 计算中需要把另一个数的阶乘作为子问题, 先行解决 要用同一机器解决子问题, 遇到一些新情况 子问题的结果不是原问题结果, 过程返回后还要再乘以 n 直接采用前面的设计, 减值后转过去求出 n-1 的阶乘, 原来的 n 值就丢了, 没办法再找回来求乘积 再做一个机器也不行 : 子问题还可能有子问题, 初始 n 为任意整数, 子问题可以任意嵌套, 有穷个部件不能构造出所需机器 程序设计技术和方法裘宗燕, (17) 用栈实现递归 表面看计算阶乘需要嵌套的无穷多部机器, 但任何时刻只用一部 要想用同一机器完成所有计算, 需要做好安排, 在遇到子问题时中断当前计算, 解决子问题后回到中断的原计算 注意 : 进入子问题时的状态与处理原问题时不同 ( 如 n 变成 n-1) 为了将来能继续中断的计算, 必须保存当时状态 ( 当时 n 的值 ) 这里不能假设递归深度, 因此要准备保存任意多个寄存器值 这些值的使用顺序与保存顺序相反, 后保存的先使用 利用一个后进先出结构 栈, 就可以用同一机器完成所有子阶乘计算 下面假定有栈操作 save/restore 控制问题 : 子程序结束后应该返回哪里? continue 里保存返回位置, 递归使用同一机器时也要用这个寄存器, 给它赋了新值就会丢掉当时保存其中准备返回的位置 为了能正确返回, 调用前也需要把 continue 的值入栈 程序设计技术和方法裘宗燕, (18)

10 用栈实现递归 设置最终返回地址 (controller (assign continue (label fact-done)) fact-loop (test(op=)(regn)(const1)) (branch (label base-case)) (save continue) (save n) (assign n (op -) (reg n) (const 1)) (assign continue (label after-fact)) (goto (label fact-loop)) 保存 continue 和 n 的值, 以便子程序返回后恢复, 使计算可以继续下去 after-fact (restore n) (restore continue) (assign val (op *) (reg n) (reg val)) ; val now contains n(n -1)! (goto (reg continue)) ;returntocaller base-case (assign val (const 1)) ; base case: 1! = 1 (goto (reg continue)) ;returntocaller fact-done) 进一步递归调用前保存返回的位置 程序设计技术和方法裘宗燕, (19) 用栈实现递归 实现递归计算, 原则上需要无穷机器 这里用有穷机器实现, 其中仍然有无穷的东西 : 栈的存储空间没有上界 实际机器里栈的规模有限, 限制了机器递归的深度, 也限制了能求解的阶乘的规模 ( 参数 n 的值 ) 处理递归的一般方法 : 用一部常规寄存器机器加一个栈 遇到递归调用, 已后要用的寄存器值存入栈 特别是当时 continue 寄存器的值 ( 将来返回时需要用 ) 所有子程序调用的问题都可以统一到这个模式, 前面说过的在子程序里调用子程序的麻烦也一起解决了 考虑双递归, 以过程 fib 为例 : (define (fib n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))) 斐波纳契数计算可以实现为寄存器机器 两个递归调用都用同一机器完成 调用前设置 continue 寄存器, 指明完成计算后返回的位置 程序设计技术和方法裘宗燕, (20)

11 (controller (assign 用栈实现递归 continue (label fib-done)) fib-loop (test (op <) (reg n) (const 2)) (branch (label immediate-answer)) (save continue) ;; set up to compute Fib(n - 1) (assign continue (label afterfib-n-1)) (save n) ; save old value of n (assign n (op -) (reg n) (const 1)); clobber n to n - 1 (goto (label fib-loop)) ; perform recursive call afterfib-n-1 ; upon return, val contains Fib(n - 1) (restore n) (restore continue) (assign n (op -) (reg n) (const 2)) ;; set up to compute Fib(n - 2) (save continue) (assign continue (label afterfib-n-2)) (save val) ; save Fib(n - 1) (goto (label fib-loop)) afterfib-n-2 ; upon return, val contains Fib(n - 2) (assign n (reg val)) ; n now contains Fib(n - 2) (restore val) ; val now contains Fib(n - 1) (restore continue) (assign val (op +) (reg val) (reg n)) ; Fib(n - 1) + Fib(n - 2) (goto (reg continue)) ; return to caller, answer is in val immediate-answer (assign val (reg n)) ; base case: Fib(n) = n (goto (reg continue)) fib-done) 程序设计技术和方法裘宗燕, (21) 寄存器指令的总结 下面的 <input> 为 (reg <register-name>) 或 (constant <constant-value>) (assign <register-name> (reg <register-name>)) (assign <register-name> (const <constant-value>)) (assign <register-name> (op<operation-name>) <input 1 >... <input n >) (perform (op <operation-name>) <input 1 >... <input n >) (test (op <operation-name>) <input 1 >... <input n >) (branch (label <label-name>)) (goto (label <label-name>)) 将标号存入寄存器和通过寄存器间接转跳 (assign <register-name> (label <label-name>)) (goto(reg<register-name>)) 栈指令 : (save <register-name>) (restore <register-name>) 前面的 <constant-value> 都是数值, 还可能考虑字符串 符号和表常量等 : (constant "abc"), (const abc), (const (a b c)) 程序设计技术和方法裘宗燕, (22)

12 寄存器机器模拟器 考虑如何实现寄存器机器语言的意义 需要测试所设计的机器能否完成期望工作, 满足实际计算的需要 应该实现一个寄存器机器的模拟器 ( 解释器 ) 下面开发的模拟器也是一个 Scheme 程序, 有 4 个接口过程 过程 make-machine 按被模拟机器的描述 ( 寄存器 操作和控制器 ) 构造一个可以模拟执行的机器模型 (make-machine <register-names> <operations> <controller>) 另外三个过程用于操作被模拟的机器 : (set-register-contents! <machine-model> <register-name> <value>) 把一个值存入指定的寄存器 (get-register-contents <machine-model> <register-name>) 取出一个寄存器的内容 (start <machine-model>) 让机器开始运行 程序设计技术和方法裘宗燕, (23) 使用机器模拟器 ( 示例 ) GCD 机器的定义 : (define gcd-machine (make-machine '(a b t) (list (list 'rem remainder) (list '= =)) '(test-b (test (op =) (reg b) (const 0)) (branch (label gcd-done)) (assignt(oprem)(rega)(regb)) (assign a (reg b)) (assign b (reg t)) (goto (label test-b)) gcd-done))) make-machine 参数依次为 : 寄存器表 操作表 ( 每个子表给出操作名和实现操作的 Scheme 过程 ) 控制器代码 计算 : 设置寄存器, 然后启动 (set-register-contents! gcd-machine 'a 206) done (set-register-contents! gcd-machine 'b 40) done (start gcd-machine) done (get-register-contents gcd-machine 'a) 2 程序设计技术和方法裘宗燕, (24)

13 make-machine: 生成机器模型 机器模型是包含局部变量的过程, 采用消息传递技术 先用 make-new-machine 构造出所有寄存器机器都需要的公共部分, 包括几个内部寄存器, 一个栈和一个执行器 然后扩充该模型 :1) 加入具体机器的寄存器和操作 ;2) 用一个汇编器把控制器表翻译成易于解释的指令序列并安装到机器里 make-machine 的定义 : (define (make-machine register-names ops controller-text) (let ((machine (make-new-machine))) 加入所定义机 (for-each (lambda (register-name) 器的寄存器 ((machine 'allocate-register) register-name)) register-names) ((machine 'install-operations) ops) 安装机器 ((machine 'install-instruction-sequence) 的操作 (assemble controller-text machine)) machine)) 安装指令序列 程序设计技术和方法裘宗燕, (25) 机器模型 : 寄存器 寄存器是有局部状态的过程, 可以保存值 访问和修改 make-register 构造这种寄存器 (define (make-register name) (let ((contents '*unassigned*)) (define (register message) (cond ((eq? message 'get) contents) ((eq? message 'set) (lambda (value) (set! contents value))) (else (error "Unknown request -- REGISTER" message)))) register)) 访问寄存器的过程 : (define (get-contents register) (register 'get)) (define (set-contents! register value) ((register 'set) value)) 程序设计技术和方法裘宗燕, (26)

14 机器模型 : 栈 栈是有局部状态的过程, 用 make-stack 创建, 接收 push pop 和 initialize 消息 ( 压入元素, 弹出元素, 初始化 ) (define (make-stack) (let ((s '())) (define (push x) (set! s (cons x s))) (define (pop) (if (null? s) (error "Empty stack -- POP") (let ((top (car s))) (set! s (cdr s)) top))) (define (initialize) (set! s '()) 'done) (define (stack message) (cond ((eq? message 'push) push) ((eq? message 'pop) (pop)) ((eq? message 'initialize) (initialize)) stack)) 定义访问栈的过程 : (define (pop stack) (stack 'pop)) (define (push stack value) ((stack 'push) value)) (else (error "Unknown request -- STACK" message)))) 程序设计技术和方法裘宗燕, (27) 基本机器的构造 内部状态包括指令计数器 pc, 寄存器 flag, 栈 stack 和空指令序列 操作表里只包含初始化栈操作, 寄存器表只包含 pc 和 flag (define (make-new-machine) (let ((pc (make-register 'pc)) (flag (make-register 'flag)) (stack (make-stack)) (the-instruction-sequence '())) pc 确定当前指令位置,flag 用于实现分支, 由检测操作设置, 后续操作可检查和使用 (let ((the-ops (list (list 'initialize-stack (lambda () (stack 'initialize))))) (register-table (list (list 'pc pc) (list 'flag flag)))) (define (allocate-register name) (if (assoc name register-table) (error "Multiply defined register: " name) (set! register-table (cons (list name (make-register name)) register-table))) 'register-allocated) (define (lookup-register name) (let ((val (assoc name register-table))) (if val (cadr val) (error "Unknown register:" name)))) ;; 接下页 分配寄存器, 在寄存器表里加入指定名字的寄存器 取寄存器的当前值 程序设计技术和方法裘宗燕, (28)

15 (define (execute) 执行指令 总取 pc 所 (let ((insts (get-contents pc))) 指向的指令来执行 (if (null? insts) 'done 指令执行将改变 pc (begin ( (instruction-execution-proc (car insts)) ) (execute))))) (define (basic-machine message) ; 接口过程 (cond ((eq? message 'start) (set-contents! pc the-instruction-sequence) (execute) ) ((eq? message 'install-instruction-sequence) (lambda (seq) (set! the-instruction-sequence seq)) ) ((eq? message 'allocate-register) allocate-register) ((eq? message 'get-register) lookup-register) ((eq? message 'install-operations) (lambda (ops) (set! the-ops (append the-ops ops)))) ((eq? message 'stack) stack) ((eq? message 'operations) the-ops) (else (error "Unknown request -- MACHINE" message)))) basic-machine) ) ) ;; 返回构造好的基本机器 程序设计技术和方法裘宗燕, (29) 基本机器 定义 start 的使用接口, 再定义另外两个过程 : (define (start machine) (machine 'start)) (define (get-register-contents machine register-name) (get-contents (get-register machine register-name))) (define (set-register-contents! machine register-name value) (set-contents! (get-register machine register-name) value) 'done) 取指定寄存器信息的基本操作, 许多过程都用 (define (get-register machine reg-name) ((machine 'get-register) reg-name)) 程序设计技术和方法裘宗燕, (30)

16 汇编程序 最重要的部分是一个汇编程序, 它把机器控制器翻译为一个指令序列, 每条指令带着相应的执行过程 与分析求值器类似, 但是这里处理的是寄存器机器语言 不知道表达式的值和寄存器的内容, 也可以做一些分析和优化, 如 用指向寄存器对象的指针代替基于名字的寄存器引用 用指向指令序列里具体位置的指针代替标号引用 在生成执行过程之前先确定标号的位置, 方式 : 扫描整个控制器, 识别指令序列里的标号, 构造出一个指令表和一个标号位置关联表 ( 每个标号关联指令表里的一个位置 ) 再次扫描控制器, 生成并设置指令表里各指令的执行过程 汇编程序的入口是 assemble, 它以一个控制器正文和一个基本机器模型为参数, 返回做好且能放入机器模型的指令序列 程序设计技术和方法裘宗燕, (31) 汇编程序 ( 几个辅助过程 ) 标号表项用序对表示, 相关过程 : (define (make-label-entry label-name insts) (cons label-name insts)) (define (lookup-label labels label-name) (let ((val (assoc label-name labels))) (if val (cdr val) (error "Undefined label -- ASSEMBLE" label-name)))) 构造和使用指令表的过程 : (define (make-instruction text) (cons text '())) 构造指令表时执行过程暂用一个空 (define (instruction-text inst) 表, 后面填入实际执行过程 (car inst)) (define (instruction-execution-proc inst) (cdr inst)) (define (set-instruction-execution-proc! inst proc) (set-cdr! inst proc)) 程序设计技术和方法裘宗燕, (32)

17 汇编程序 汇编程序的代码 (define (assemble controller-text machine) (extract-labels controller-text (lambda (insts labels) (update-insts! insts labels machine) insts) ) ) 逐项检查指令表内容, 提取其中的标号 (define (extract-labels text receive) (if (null? text) (receive '() '()) (extract-labels (cdr text) (lambda (insts labels) (let ((next-inst (car text))) (if (symbol? next-inst) (receive insts 构造初始指令表和标号表, 而后用这两个表调用其第二个参数 以指令表 标号表和机器为参数, 生成各指令的执行过程加入指令表, 最后返回指令表 递归处理控制器正文序列的 cdr, 将对其 car 处理得到的标号项加在对其 cdr 处理得到的指令表和标号表前面 检查控制器正文的第一项是否标号, 根据情况加入指令表项或标号表项 (cons (make-label-entry next-inst insts) labels) ) (receive (cons (make-instruction next-inst) insts) labels) )))))) 程序设计技术和方法裘宗燕, (33) 汇编程序 undate-insts! 修改指令表 原来每个位置只有指令正文, 执行过程用空表占位,undate-insts! 加入实际的执行过程 (define (update-insts! insts labels machine) (let ((pc (get-register machine 'pc)) (flag (get-register machine 'flag)) (stack (machine 'stack)) (ops (machine 'operations))) (for-each (lambda (inst) (set-instruction-execution-proc! inst (make-execution-procedure (instruction-text inst) labels machine pc flag stack ops) ) ) insts))) 给一条指令设置执行过程 构造一条指令的执行过程 程序设计技术和方法裘宗燕, (34)

18 指令的执行过程 生成一条指令的执行过程, 工作方式类似求值器的 analyze 过程 (define (make-execution-procedure inst labels machine pc flag stack ops) (cond ((eq? (car inst) 'assign) 每种指令有一个执 (make-assign inst machine labels ops pc)) 行过程的生成过程, ((eq? (car inst) 'test) 根据具体指令的语 (make-test inst machine labels ops flag pc)) 法和意义确定 ((eq? (car inst) 'branch) 用数据抽象技术隔 (make-branch inst machine labels flag pc)) 离指令的具体表示 ((eq? (car inst) 'goto) 和对指令的操作 (make-goto inst machine labels pc)) ((eq? (car inst) 'save) 下面逐条考虑各种 (make-save inst machine stack pc)) 指令的处理 ((eq? (car inst) 'restore) (make-restore inst machine stack pc)) ((eq? (car inst) 'perform) (make-perform inst machine labels ops pc)) (else (error "Unknown instruction type -- ASSEMBLE" inst)))) 程序设计技术和方法裘宗燕, (35) 执行过程 :assign 生成赋值指令的执行过程 从指令中取出被赋值的寄存器和值表达式 (define (make-assign inst machine labels operations pc) (let ((target (get-register machine (assign-reg-name inst))) (value-exp (assign-value-exp inst))) 构造一般 op 表 (let ((value-proc (if (operation-exp? value-exp) 达式的执行过程 (make-operation-exp value-exp machine labels operations) (make-primitive-exp (car value-exp) machine labels)))) (lambda () ; assign 的执行过程 (set-contents! target (value-proc)) (advance-pc pc))))) 其中用到的辅助过程 : (define (assign-reg-name assign-instruction) (cadr assign-instruction)) (define (assign-value-exp assign-instruction) (cddr assign-instruction)) 根据表达式的运算符构造执行过程, 区分一般表达式和基本表达式 构造基本表达式的执行过程 基本表达式包括 reg,label,const 通用的指令计数器更新过程 (define (advance-pc pc) (set-contents! pc (cdr (get-contents pc)))) 程序设计技术和方法裘宗燕, (36)

19 执行过程 :test make-test 处理 test 指令, 设置 flag 寄存器, 更新 pc: (define (make-test inst machine labels operations flag pc) (let ((condition (test-condition inst))) 做出 op 表达 (if (operation-exp? condition) 式的执行过程 (let ((condition-proc (make-operation-exp condition machine labels operations))) (lambda () (set-contents! flag (condition-proc)) (advance-pc pc))) (error "Bad TEST instruction -- ASSEMBLE" inst)))) (define (test-condition test-instruction) (cdr test-instruction)) 程序设计技术和方法裘宗燕, (37) 执行过程 :branch branch 指令根据 flag 更新 pc: (define (make-branch inst machine labels flag pc) (let ((dest (branch-dest inst))) 从标号表里找出标号在 (if (label-exp? dest) 指令序列里的位置 (let ((insts (lookup-label labels (label-exp-label dest)))) (lambda () (if (get-contents flag) 根据 flag 的值决 (set-contents! pc insts) 定如何更新 pc (advance-pc pc)))) (error "Bad BRANCH instruction -- ASSEMBLE" inst)))) (define (branch-dest branch-instruction) (cadr branch-instruction)) 取得转跳指令里的标号 注意 : 只有 goto 指令可以用寄存器间接,branch 不能 程序设计技术和方法裘宗燕, (38)

20 执行过程 :goto goto 的特殊情况是转跳位置可能用标号或寄存器描述, 分别处理 (define (make-goto inst machine labels pc) (let ((dest (goto-dest inst))) 是标号, 找出标号位置 (cond ((label-exp? dest) 这里可扩充找不到位置的处理 (let ((insts (lookup-label labels (label-exp-label dest)))) (lambda () (set-contents! pc insts)))) ((register-exp? dest) 处理转跳位置由寄 (let ((reg 存器描述的情况 (get-register machine (register-exp-reg dest)))) (lambda () (set-contents! pc (get-contents reg))))) (else (error "Bad GOTO instruction -- ASSEMBLE" inst))))) (define (goto-dest goto-instruction) (cadr goto-instruction)) 程序设计技术和方法裘宗燕, (39) 执行过程 :save 和 restore 这两条指令针对特定寄存器使用栈, 并更新 pc (define (make-save inst machine stack pc) (let ((reg (get-register machine (stack-inst-reg-name inst)))) (lambda () (push stack (get-contents reg)) (advance-pc pc)))) (define (make-restore inst machine stack pc) (let ((reg (get-register machine (stack-inst-reg-name inst)))) (lambda () (set-contents! reg (pop stack)) (advance-pc pc)))) (define (stack-inst-reg-name stack-instruction) (cadr stack-instruction)) 程序设计技术和方法裘宗燕, (40)

21 其他指令 其他指令的执行由 make-perform 处理, 它生成相应执行过程, 在实际模拟中执行相应动作并更新 pc: (define (make-perform inst machine labels operations pc) (let ((action (perform-action inst))) 构造 op 表达 (if (operation-exp? action) 式的执行过程 (let ((action-proc (make-operation-exp action machine labels operations))) (lambda () (action-proc) (advance-pc pc)) ) (error "Bad PERFORM instruction -- ASSEMBLE" inst)))) (define (perform-action inst) (cdr inst)) 程序设计技术和方法裘宗燕, (41) 执行 : 子表达式 多种指令里用到 make-operation-exp, 其中可能用 reg label 或 const 的值, 都是基本表达式, 相应执行过程 : (define (make-primitive-exp exp machine labels) (cond ((constant-exp? exp) (let ((c (constant-exp-value exp))) (lambda () c))) ((label-exp? exp) (let ((insts (lookup-label labels (label-exp-label exp)))) (lambda () insts))) ; 标号就是指令表中一个位置 ((register-exp? exp) (let ((r (get-register machine (register-exp-reg exp)))) (lambda () (get-contents r)))) (else (error "Unknown expression type -- ASSEMBLE" exp)))) 基本表达式的语法过程 : (define (register-exp? exp) (tagged-list? exp 'reg)) (define (register-exp-reg exp) (cadr exp)) (define (constant-exp? exp) (tagged-list? exp 'const)) (define (constant-exp-value exp) (cadr exp)) (define (label-exp? exp) (tagged-list? exp 'label)) (define (label-exp-label exp) (cadr exp)) 程序设计技术和方法裘宗燕, (42)

22 执行 : 子表达式 assign perform 和 test 指令的执行过程都将机器操作应用于操作对象 (reg 表达式或 const 表达式 ), 这种操作的执行过程 (define (make-operation-exp exp machine labels operations) (let ((op (lookup-prim (operation-exp-op exp) operations)) (aprocs (map (lambda (e) (make-primitive-exp e machine labels)) (operation-exp-operands exp)))) (lambda () (apply op (map (lambda (p) (p)) aprocs))))) 为每个操作对象生成一个执行过程 相应语法过程 : 调用操作对象的执行过程, 得到它们 (define (operation-exp? exp) 的值 ; 而后应用操 (and (pair? exp) (tagged-list? (car exp) 'op))) 作本身的执行过程 (define (operation-exp-op operation-exp) (cadr (car operation-exp))) (define (operation-exp-operands operation-exp) (cdr operation-exp)) 程序设计技术和方法裘宗燕, (43) 执行 : 子表达式 在模拟中需要找过程时, 用操作名到从机器的操作表里查找 : (define (lookup-prim symbol operations) (let ((val (assoc symbol operations))) (if val (cadr val) (error "Unknown operation -- ASSEMBLE" symbol)))) 注意 : 找到的是对应的 Scheme 过程, 而后用 apply 应用它 程序设计技术和方法裘宗燕, (44)

23 监视执行 实际模拟可以验证所定义机器的正确性, 还可以考查其性能 可以给模拟程序安装一些 测量仪器 例如记录栈操作的次数等, 为此需要给基本机器模型增加一个操作 (list (list 'initialize-stack (lambda () (stack 'initialize))) (list 'print-stack-statistics (lambda () (stack 'print-statistics)))) 修改 make-stack 的定义, 加入计数和输出统计结果的功能 : (define (make-stack) (let ((s '()) (number-pushes 0) (max-depth 0) (current-depth 0)) (define (push x) (set! s (cons x s)) (set! number-pushes (+ 1 number-pushes)) (set! current-depth (+ 1 current-depth)) (set! max-depth (max current-depth max-depth))) ;; 接下页 程序设计技术和方法裘宗燕, (45) 监视执行 (define (pop) (if (null? s) (error "Empty stack -- POP") (let ((top (car s))) (set! s (cdr s)) (set! current-depth (- current-depth 1)) top))) (define (initialize) (set! s '()) (set! number-pushes 0) (set! max-depth 0) (set! current-depth 0) 'done) (define (print-statistics) (newline) (display (list 'total-pushes = ' number-pushes 'maximum-depth = ' max-depth))) (define (stack message) (cond ((eq? message 'push) push) ((eq? message 'pop) (pop)) ((eq? message 'initialize) (initialize)) ((eq? message 'print-statistics) (print-statistics)) (else (error "Unknown request -- STACK" message)))) stack)) 程序设计技术和方法裘宗燕, (46)

24 总结 寄存器机器的概念和结构 ( 基本 : 数据通道, 控制器 ) 根据实际计算的需要研究相应寄存器机器的设计 寄存器机器的文本表示形式 ( 寄存器机器语言 ) 复杂操作的实现和子程序 递归子程序和栈, 通用的子程序调用模式 寄存器机器模拟器 机器结构 基本机器 汇编程序 各种操作的执行程序 监视运行 程序设计技术和方法裘宗燕, (47)

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

ebook14-4

ebook14-4 4 TINY LL(1) First F o l l o w t o p - d o w n 3 3. 3 backtracking parser predictive parser recursive-descent parsing L L ( 1 ) LL(1) parsing L L ( 1 ) L L ( 1 ) 1 L 2 L 1 L L ( k ) k L L ( 1 ) F i r s

More information

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20 (Jump) (Loop) (Conditional jump) CMP CALL AND SAR/SHR TEST JMP NOT SAL/SHL Jnnn* OR RCR/ROR LOOP XOR RCL/ROL RETn * nnn, JNE JL -128 127-32,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

WWW PHP

WWW PHP WWW PHP 2003 1 2 function function_name (parameter 1, parameter 2, parameter n ) statement list function_name sin, Sin, SIN parameter 1, parameter 2, parameter n 0 1 1 PHP HTML 3 function strcat ($left,

More information

1.ai

1.ai HDMI camera ARTRAY CO,. LTD Introduction Thank you for purchasing the ARTCAM HDMI camera series. This manual shows the direction how to use the viewer software. Please refer other instructions or contact

More information

入學考試網上報名指南

入學考試網上報名指南 入 學 考 試 網 上 報 名 指 南 On-line Application Guide for Admission Examination 16/01/2015 University of Macau Table of Contents Table of Contents... 1 A. 新 申 請 網 上 登 記 帳 戶 /Register for New Account... 2 B. 填

More information

第5章:汇编语言程序设计

第5章:汇编语言程序设计 第 5 章 : 汇编语言程序设计 程 汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1 汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2 汇编语言指令格式 汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3 汇编语言指令格式 1 指令 用 指令

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

Computer Architecture

Computer Architecture ECE 3120 Computer Systems Assembly Programming Manjeera Jeedigunta http://blogs.cae.tntech.edu/msjeedigun21 Email: msjeedigun21@tntech.edu Tel: 931-372-6181, Prescott Hall 120 Prev: Basic computer concepts

More information

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf(%d, &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf(% 2013 ( 28 ) ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 10 B 1 C 1 D 5 E 5 F 1 G II 5 H 30 1 2013 C 1 #include 2 int main(void) 3

More information

WinMDI 28

WinMDI 28 WinMDI WinMDI 2 Region Gate Marker Quadrant Excel FACScan IBM-PC MO WinMDI WinMDI IBM-PC Dr. Joseph Trotter the Scripps Research Institute WinMDI HP PC WinMDI WinMDI PC MS WORD, PowerPoint, Excel, LOTUS

More information

Microsoft PowerPoint - Lecture7II.ppt

Microsoft PowerPoint - Lecture7II.ppt Lecture 8II SUDOKU PUZZLE SUDOKU New Play Check 軟體實作與計算實驗 1 4x4 Sudoku row column 3 2 } 4 } block 1 4 軟體實作與計算實驗 2 Sudoku Puzzle Numbers in the puzzle belong {1,2,3,4} Constraints Each column must contain

More information

2/80 2

2/80 2 2/80 2 3/80 3 DSP2400 is a high performance Digital Signal Processor (DSP) designed and developed by author s laboratory. It is designed for multimedia and wireless application. To develop application

More information

AL-M200 Series

AL-M200 Series NPD4754-00 TC ( ) Windows 7 1. [Start ( )] [Control Panel ()] [Network and Internet ( )] 2. [Network and Sharing Center ( )] 3. [Change adapter settings ( )] 4. 3 Windows XP 1. [Start ( )] [Control Panel

More information

科学计算的语言-FORTRAN95

科学计算的语言-FORTRAN95 科 学 计 算 的 语 言 -FORTRAN95 目 录 第 一 篇 闲 话 第 1 章 目 的 是 计 算 第 2 章 FORTRAN95 如 何 描 述 计 算 第 3 章 FORTRAN 的 编 译 系 统 第 二 篇 计 算 的 叙 述 第 4 章 FORTRAN95 语 言 的 形 貌 第 5 章 准 备 数 据 第 6 章 构 造 数 据 第 7 章 声 明 数 据 第 8 章 构 造

More information

Microsoft PowerPoint - ch6 [相容模式]

Microsoft PowerPoint - ch6 [相容模式] UiBinder wzyang@asia.edu.tw UiBinder Java GWT UiBinder XML UI i18n (widget) 1 2 UiBinder HelloWidget.ui.xml: UI HelloWidgetBinder HelloWidget.java XML UI Owner class ( Composite ) UI XML UiBinder: Owner

More information

coverage2.ppt

coverage2.ppt Satellite Tool Kit STK/Coverage STK 82 0715 010-68745117 1 Coverage Definition Figure of Merit 2 STK Basic Grid Assets Interval Description 3 Grid Global Latitude Bounds Longitude Lines Custom Regions

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

epub 94-3

epub 94-3 3 A u t o C A D L AY E R L I N E T Y P E O S N A P S T Y L E X R E F - AutoLISP Object ARX A u t o C A D D C L A u t o C A D A u t o d e s k P D B D C L P D B D C L D C L 3.1 Wi n d o w s A u t o C A D

More information

WWW PHP Comments Literals Identifiers Keywords Variables Constants Data Types Operators & Expressions 2

WWW PHP Comments Literals Identifiers Keywords Variables Constants Data Types Operators & Expressions 2 WWW PHP 2003 1 Comments Literals Identifiers Keywords Variables Constants Data Types Operators & Expressions 2 Comments PHP Shell Style: # C++ Style: // C Style: /* */ $value = $p * exp($r * $t); # $value

More information

extend

extend (object oriented) Encapsulation Inheritance Polymorphism Dynamic Binding (base class) (derived class) 1 class Base { int I; void X(); void Y(); class Derived: public Base { private: int j; void z(); Derived

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

编译原理与技术

编译原理与技术 编译原理与技术 中间代码生成 2015/11/7 编译原理与技术 讲义 1 中间代码生成 - 布尔表达式翻译 - 控制流语句翻译 2015/11/7 编译原理与技术 讲义 2 布尔表达式的翻译 布尔表达式文法 G 4 E E 1 or E 2 E 1 and E 2 not E 1 ( E 1 ) id 1 relop id 2 true false id 3 布尔运算符 or and 和 not(

More information

els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8

els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8 els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8 Yamaha ELS-0/0C..8 LCD ELS-0/0C v. typeu LCD ELS-0/0C typeu / -6 / [SEARCH] / - ZH ELS-0/0C.8 els0xu_zh_nf_v8.book Page Wednesday, June,

More information

Microsoft Word - SupplyIT manual 3_cn_david.doc

Microsoft Word - SupplyIT manual 3_cn_david.doc MR PRICE Supply IT Lynette Rajiah 1 3 2 4 3 5 4 7 4.1 8 4.2 8 4.3 8 5 9 6 10 6.1 16 6.2 17 6.3 18 7 21 7.1 24 7.2 25 7.3 26 7.4 27 7.5 28 7.6 29 7.7 30 7.8 31 7.9 32 7.10 32 7.11 33 7.12 34 1 7.13 35 7.14

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

untitled

untitled 2006 6 Geoframe Geoframe 4.0.3 Geoframe 1.2 1 Project Manager Project Management Create a new project Create a new project ( ) OK storage setting OK (Create charisma project extension) NO OK 2 Edit project

More information

Fuzzy Highlight.ppt

Fuzzy Highlight.ppt Fuzzy Highlight high light Openfind O(kn) n k O(nm) m Knuth O(n) m Knuth Unix grep regular expression exact match Yahoo agrep fuzzy match Gais agrep Openfind gais exact match fuzzy match fuzzy match O(kn)

More information

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO Car DVD New GUI IR Flow User Manual V0.1 Jan 25, 2008 19, Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 Web: www.sunplus.com Important Notice SUNPLUS

More information

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

A Preliminary Implementation of Linux Kernel Virus and Process Hiding 邵 俊 儒 翁 健 吉 妍 年 月 日 学 号 学 号 学 号 摘 要 结 合 课 堂 知 识 我 们 设 计 了 一 个 内 核 病 毒 该 病 毒 同 时 具 有 木 马 的 自 动 性 的 隐 蔽 性 和 蠕 虫 的 感 染 能 力 该 病 毒 获 得 权 限 后 会 自 动 将 自 身 加 入 内 核 模 块 中 劫 持 的 系 统 调 用 并 通 过 简 单 的 方 法 实 现 自 身 的

More information

什么是函数式编程?

什么是函数式编程? 函数式编程 FUNCTIONAL PROGRAMMING byvoid@byvoid.com 什么是函数式编程? 真相是 从停机问题开始 Bug 假设有停机判定算法 function halting(func, input) { } return if_func_will_halt_on_input; 充分利用停机判定 function ni_ma(func) { if (halting(func,

More information

三維空間之機械手臂虛擬實境模擬

三維空間之機械手臂虛擬實境模擬 VRML Model of 3-D Robot Arm VRML Model of 3-D Robot Arm MATLAB VRML MATLAB Simulink i MATLAB Simulink V-Realm Build Joystick ii Abstract The major purpose of this thesis presents the procedure of VRML

More information

穨control.PDF

穨control.PDF TCP congestion control yhmiu Outline Congestion control algorithms Purpose of RFC2581 Purpose of RFC2582 TCP SS-DR 1998 TCP Extensions RFC1072 1988 SACK RFC2018 1996 FACK 1996 Rate-Halving 1997 OldTahoe

More information

Simulator By SunLingxi 2003

Simulator By SunLingxi 2003 Simulator By SunLingxi sunlingxi@sina.com 2003 windows 2000 Tornado ping ping 1. Tornado Full Simulator...3 2....3 3. ping...6 4. Tornado Simulator BSP...6 5. VxWorks simpc...7 6. simulator...7 7. simulator

More information

技 巧 5: 避 免 除 以 0 的 運 算 在 做 除 的 運 算 時, 先 檢 查 除 數 的 數 值, 避 免 有 除 以 0 的 情 況 若 運 算 中 除 數 為 0,SAS 會 在 LOG 中 註 記 提 醒 並 將 運 算 結 果 設 定 為 遺 漏 值, 減 慢 程 式 的 執 行

技 巧 5: 避 免 除 以 0 的 運 算 在 做 除 的 運 算 時, 先 檢 查 除 數 的 數 值, 避 免 有 除 以 0 的 情 況 若 運 算 中 除 數 為 0,SAS 會 在 LOG 中 註 記 提 醒 並 將 運 算 結 果 設 定 為 遺 漏 值, 減 慢 程 式 的 執 行 提 升 SAS 效 率 的 小 技 巧 ( 二 ) 統 計 分 析 師 嚴 友 君 在 使 用 SAS 的 時 候, 效 率 的 考 量 除 了 程 式 運 行 的 時 間, 還 包 括 資 料 佔 用 的 空 間 暫 存 記 憶 體 的 使 用 量 程 式 的 長 度 與 易 讀 性 等 等 以 下 介 紹 一 些 初 學 者 容 易 應 用, 且 在 討 論 使 用 SAS 處 理 分 析 資

More information

软件测试设计

软件测试设计 2004-1 Overview IEEE 2 4 5 6 :6 0:50 0:40 1:40 0:40 0:40 Total: IEEE 270 7 9 RUP 10 11 - 12 - 1 2. 3. / 4. 5. 6. 7. 8. 9. 13 - 14 - 1. / 2. 3. 15 - 16 - 1. / 2. / / 3. / / 4. 17 - 18 20 21 -. 22 - 3-4

More information

Andes Technology PPT Temp

Andes Technology PPT Temp 晶心科技線上技術研討會 AndesCore 便捷的全 C 嵌入式编程 晶心科技市場及技術服務部毛礼杰軟件經理 WWW.ANDESTECH.COM 大纲 系统初始化介绍 异常和中断说明 全 C 语法例子说明 总结 2 CPU 相关特性 1: 中断向量表 系统初始化 (1) 2: 系统寄存器 通常需要用 assembly( 汇编 / 组合 ) 语言来操作 AndesCore 全 C 嵌入式编程 C 扩展语法

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

Microsoft PowerPoint - C15_LECTURE_NOTE_06

Microsoft PowerPoint - C15_LECTURE_NOTE_06 61 Flag-Control 8088/8086 MICROPROCESSOR PROGRAMMING CONTROL FLOW INSTRUCTIONS AND PROGRAM STRUCTURES LAHF SAHF CLC STC CMC CLI STI Load AH from flags Store AH into flags Clear carry flag Set carry flag

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

Microsoft PowerPoint sun-arm isa2.ppt [Compatibility Mode]

Microsoft PowerPoint sun-arm isa2.ppt [Compatibility Mode] 嵌入式系统设计与应用 第二章 ARM 指令系统 (2) 西安交通大学电信学院 孙宏滨 汇编伪指令 汇编伪指令 : 在 ARM 汇编语言里, 有一些特殊指令助记符, 没有相对应的操作码 ( 或直接对应指令 ) 通常称这些特殊指令助记符为伪指令, 它们所完成的操作叫做伪操作 伪指令在源程序中的作用是为完成汇编程序作各种准备工作 这些伪指令仅在汇编过程中起作用, 一旦汇编结束, 伪指令的使命完成 ADR:

More information

K301Q-D VRT中英文说明书141009

K301Q-D VRT中英文说明书141009 THE INSTALLING INSTRUCTION FOR CONCEALED TANK Important instuction:.. Please confirm the structure and shape before installing the toilet bowl. Meanwhile measure the exact size H between outfall and infall

More information

GCSE Mathematics Question Paper Unit 2 March 2012

GCSE Mathematics Question Paper Unit 2 March 2012 Centre Number Surname Candidate Number For Examiner s Use Other Names Candidate Signature Examiner s Initials General Certificate of Secondary Education Higher Tier March 2012 Pages 2 3 4 5 Mark Mathematics

More information

Microsoft PowerPoint - notes3-Simple-filled12

Microsoft PowerPoint - notes3-Simple-filled12 Generic Computer Organization CSE 30321 Computer Architecture I Lecture Notes 3: A Simple Computer: Simple12 And Design at Register Transfer Level Stored Program Machine (vonneumann Model) Instructions

More information

2

2 RE-101M2 2 3 1. 3. 2. 1 l 1 2 4 3 4 5 1 2 5 1. 3. 2. 4. 12 5. 7. 6. 8. 13 10. 9. 14 1 1. 2. 5. 3. 4. 6 1. 2. 1. 2. 7 1. 5. 2. 6. 3. 7. 4. 8. 8 9 2. 3. 1. 6. 8. 7. 5. 4. 10 1. 2. 1. 11 ...4...1... 4...2...1

More information

HLA-B27軟體

HLA-B27軟體 HLA-B27 HLA-B27 CaliBRITE Beads FACSComp HLA-B27 Calibration Beads HLA-B27 HLA-B27 1. HLA-B27 1.1 HLA-B27 HLA Major Histocompatibity Complex MHC HLA HLA-A -B -C HLA HLA-D/DR -DP -DQ B HLA HLA HLA HLA-B27

More information

SQL Server SQL Server SQL Mail Windows NT

SQL Server SQL Server SQL Mail Windows NT ... 3 11 SQL Server... 4 11.1... 7 11.2... 9 11.3... 11 11.4... 30 11.5 SQL Server... 30 11.6... 31 11.7... 32 12 SQL Mail... 33 12.1Windows NT... 33 12.2SQL Mail... 34 12.3SQL Mail... 34 12.4 Microsoft

More information

Go构建日请求千亿微服务最佳实践的副本

Go构建日请求千亿微服务最佳实践的副本 Go 构建 请求千亿级微服务实践 项超 100+ 700 万 3000 亿 Goroutine & Channel Goroutine Channel Goroutine func gen() chan int { out := make(chan int) go func(){ for i:=0; i

More information

06-4.indd

06-4.indd 1 02 07 13 16 20 28 33 38 42 46 48 51 57 64 65 65 66 67 68 2 3 4 5 6 7 8 9 10 11 12 13 LL T : 14 LL T 15 16 扫描电子显微镜成像模拟的 MPI 及 OpenMP 并行化 17 18 19 20 21 22 ~ ~ ~ 23 24 ~ ~ ~ ~ ~ ~ ~ 25 26 27 28 29 图 3

More information

100 5 ϕ ϕ ϕ ϕ ϕ ϕ ϕ ϕ 1 7 30 13 19 1 7 40 56 13 19 1 7 405 58 13 19 (0 5 10 15 20 40 ) ( ) 14 80 160 320 20 X = x1 + x2 + x3 + Λ Λ x n X X x x x x 1 + 2 + 3+ Λ Λ n = n X X

More information

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2 (Guangzhou) AIT Co, Ltd 020-84106666 020-84106688 http://wwwlenxcn Xi III Zebra XI III 1 (Guangzhou) AIT Co, Ltd 020-84106666 020-84106688 http://wwwlenxcn 230V 110V [ ]! 2 (Guangzhou) AIT Co, Ltd 020-84106666

More information

大侠素材铺

大侠素材铺 编译原理与技术 词法分析 Ⅱ 计算机科学与技术学院李诚 13/09/2018 主要内容 记号 (token) 源程序 词法分析器 getnexttoken 语法分析器 符号表 词法分析器的自动生成 正则表达式 NFA DFA 化简的 DFA 词法分析器的生成器 Lex: flex jflex Fst lexicl nlyzer genertor 2/51 Regulr Expr to NFA 正则表达式

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

Microsoft PowerPoint - C15_LECTURE_NOTE_06

Microsoft PowerPoint - C15_LECTURE_NOTE_06 8088/8086 MICROPROCESSOR PROGRAMMING CONTROL FLOW INSTRUCTIONS AND PROGRAM STRUCTURES 8088/8086 MICROPROCESSOR PROGRAMMING CONTROL FLOW INSTRUCTIONS AND PROGRAM STRUCTURES 61 Flag-Control 62 Compare 63

More information

BC04 Module_antenna__ doc

BC04 Module_antenna__ doc http://www.infobluetooth.com TEL:+86-23-68798999 Fax: +86-23-68889515 Page 1 of 10 http://www.infobluetooth.com TEL:+86-23-68798999 Fax: +86-23-68889515 Page 2 of 10 http://www.infobluetooth.com TEL:+86-23-68798999

More information

RUN_PC連載_10_.doc

RUN_PC連載_10_.doc PowerBuilder 8 (10) Jaguar CTS ASP Jaguar CTS PowerDynamo Jaguar CTS Microsoft ASP (Active Server Pages) ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar Server ASP

More information

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

TX-NR3030_BAS_Cs_ indd

TX-NR3030_BAS_Cs_ indd TX-NR3030 http://www.onkyo.com/manual/txnr3030/adv/cs.html Cs 1 2 3 Speaker Cable 2 HDMI OUT HDMI IN HDMI OUT HDMI OUT HDMI OUT HDMI OUT 1 DIGITAL OPTICAL OUT AUDIO OUT TV 3 1 5 4 6 1 2 3 3 2 2 4 3 2 5

More information

VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2

VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2 VHDL (Statements) VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2 (Assignment Statement) (Signal Assignment Statement) (Variable Assignment

More information

Microsoft PowerPoint - CA_03 Chapter5 Part-II_multi _V1.ppt

Microsoft PowerPoint - CA_03 Chapter5 Part-II_multi _V1.ppt Chapter5-2 The Processor: Datapath and Control (Multi-cycle implementation) 臺大電機系 吳安宇教授 V1. 03/27/2007 For 2007 DSD Course 臺大電機吳安宇教授 - 計算機結構 1 Outline 5.1 Introduction 5.2 Logic Design Conventions 5.3

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

Perl

Perl Perl 磊 Goal Introduction The first perl program Basical coding style Variable Data structure Control structure Regular expression Lab Reference Outline The first perl program Just type this following string

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

Microsoft Word - LD5515_5V1.5A-DB-01 Demo Board Manual

Microsoft Word - LD5515_5V1.5A-DB-01 Demo Board Manual Subject LD5515 Demo Board Model Name (5V/1.5A) Key Features Built-In Pump Express TM Operation Flyback topology with PSR Control Constant Voltage Constant Current High Efficiency with QR Operation (Meet

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

Microsoft PowerPoint - OPVB1基本VB.ppt

Microsoft PowerPoint - OPVB1基本VB.ppt 大 綱 0.VB 能 做 什 麼? CH1 VB 基 本 認 識 1.VB 歷 史 與 版 本 2.VB 環 境 簡 介 3. 即 時 運 算 視 窗 1 0.VB 能 做 什 麼? Visual Basic =>VB=> 程 式 設 計 語 言 => 設 計 程 式 設 計 你 想 要 的 功 能 的 程 式 自 動 化 資 料 庫 計 算 模 擬 遊 戲 網 路 監 控 實 驗 輔 助 自 動

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Perl CGI 1 Perl CGI 2 Perl CGI 3 Perl CGI 4 1. 2. 1. #!/usr/local/bin/perl 2. print "Content-type: text/html n n"; 3. print " n"; 4. print " n"; 3. 4.

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

untitled

untitled MODBUS 1 MODBUS...1 1...4 1.1...4 1.2...4 1.3...4 1.4... 2...5 2.1...5 2.2...5 3...6 3.1 OPENSERIAL...6 3.2 CLOSESERIAL...8 3.3 RDMULTIBIT...8 3.4 RDMULTIWORD...9 3.5 WRTONEBIT...11 3.6 WRTONEWORD...12

More information

untitled

untitled CPU!! 00-11-8 Liping zhang, Tsinghua 1 : ADD(r1, r, r) CMPLEC(r, 5, r0) MUL(r1, r, r) SUB(r1, r, r5) ADD r, ( ) r CMP. CMP r.. t t + 1 t + t + t + t + 5 t + 6 IF( ) ADD CMP MUL SUB RF NOP ADD CMP MUL SUB

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

目录

目录 ALTERA_CPLD... 3 11SY_03091... 3 12SY_03091...4....5 21 5 22...8 23..10 24..12 25..13..17 3 1EPM7128SLC.......17 3 2EPM7032SLC.......18 33HT46R47......19..20 41..20 42. 43..26..27 5151DEMO I/O...27 52A/D89C51...28

More information

Microsoft Word - template.doc

Microsoft Word - template.doc HGC efax Service User Guide I. Getting Started Page 1 II. Fax Forward Page 2 4 III. Web Viewing Page 5 7 IV. General Management Page 8 12 V. Help Desk Page 13 VI. Logout Page 13 Page 0 I. Getting Started

More information

untitled

untitled 1 Outline 類别 欄 (1) 類 類 狀 更 易 類 理 若 類 利 來 利 using 來 namespace 類 ; (2) namespace IBM class Notebook namespace Compaq class Notebook 類别 類 來 類 列 欄 (field) (property) (method) (event) 類 例 立 來 車 類 類 立 車 欄 料

More information

untitled

untitled Co-integration and VECM Yi-Nung Yang CYCU, Taiwan May, 2012 不 列 1 Learning objectives Integrated variables Co-integration Vector Error correction model (VECM) Engle-Granger 2-step co-integration test Johansen

More information

ROP_bamboofox.key

ROP_bamboofox.key ROP Return Oriented Programming Lays @ BambooFox Who Am I Lays / L4ys / 累死 - l4ys.tw Reverse Engineering BambooFox / HITCON Outline Buffer Overflow ret2libc / ret2text Return Oriented Programming Payload

More information

四川省普通高等学校

四川省普通高等学校 四 川 省 普 通 高 等 学 校 计 算 机 应 用 知 识 和 能 力 等 级 考 试 考 试 大 纲 (2013 年 试 行 版 ) 四 川 省 教 育 厅 计 算 机 等 级 考 试 中 心 2013 年 1 月 目 录 一 级 考 试 大 纲 1 二 级 考 试 大 纲 6 程 序 设 计 公 共 基 础 知 识 6 BASIC 语 言 程 序 设 计 (Visual Basic) 9

More information

INTRODUCTION TO COM.DOC

INTRODUCTION TO COM.DOC How About COM & ActiveX Control With Visual C++ 6.0 Author: Curtis CHOU mahler@ms16.hinet.net This document can be freely release and distribute without modify. ACTIVEX CONTROLS... 3 ACTIVEX... 3 MFC ACTIVEX

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

Static Enforcement of Security with Types

Static Enforcement of Security with Types 例题 1 一个 C 语言程序及其在 X86/Linux 操作系统上的编译结 果如下 根据所生成的汇编程序来解释程序中四个变 量的存储分配 生存期 作用域和置初值方式等方面 的区别 static long aa = 10; short bb = 20; func( ) { } static long cc = 30; short dd = 40; static long aa = 10; func(

More information

Microsoft Word - PHP7Ch01.docx

Microsoft Word - PHP7Ch01.docx PHP 01 1-6 PHP PHP HTML HTML PHP CSSJavaScript PHP PHP 1-6-1 PHP HTML PHP HTML 1. Notepad++ \ch01\hello.php 01: 02: 03: 04: 05: PHP 06:

More information

呼 喊 選 集 2 3 天 國 大 英 雄 基 督 徒 因 此 在 基 督 快 將 再 臨 的 前 夕, 思 想 施 洗 約 翰 的 道 路, 對 我 們 來 說, 是 具 有 時 代 意 義 的 施 洗 約 翰 其 人 工 作 需 要 人, 需 要 合 用 的 人 在 神 的 國 度 中, 祂 所

呼 喊 選 集 2 3 天 國 大 英 雄 基 督 徒 因 此 在 基 督 快 將 再 臨 的 前 夕, 思 想 施 洗 約 翰 的 道 路, 對 我 們 來 說, 是 具 有 時 代 意 義 的 施 洗 約 翰 其 人 工 作 需 要 人, 需 要 合 用 的 人 在 神 的 國 度 中, 祂 所 基 督 先 鋒 施 洗 約 翰 天 國 大 英 雄 吳 恩 溥 施 洗 約 翰 沒 有 行 過 一 件 神 蹟, 但 他 本 身 就 是 一 個 大 神 蹟 基 督 降 臨 前 夕, 需 要 千 千 萬 萬 具 有 施 洗 約 翰 心 志 能 力 的 人, 走 在 祂 前 面 主 耶 穌 曾 公 開 稱 讚 施 洗 約 翰 : 凡 婦 人 所 生 的, 沒 有 一 個 興 起 來 大 過 施 洗 約

More information

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63>

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63> 1 实验目的 实验 2 C 和汇编语言的混合编程实验 学习在 C 程序中使用嵌入式汇编编写程序 了解嵌入式汇编的格式 语言特点 2 实验设备 S3C2410 开发板 ADS1.2 集成开发环境,JTAG 调试器 串口连接线 3 实验原理 在 ARM 的应用开发中,C 语言功能强大且容易编写程序, 但是汇编程序在底层的操作仍然具有 C 程序无法替代的功能, 有时候我们需要在 C 程序中嵌入汇编程序来完成一些直接对底层的诸如寄存器的操作

More information

MATLAB 1

MATLAB 1 MATLAB 1 MATLAB 2 MATLAB PCI-1711 / PCI-1712 MATLAB PCI-1711 / PCI-1712 MATLAB The Mathworks......1 1...........2 2.......3 3................4 4. DAQ...............5 4.1. DAQ......5 4.2. DAQ......6 5.

More information

PTS7_Manual.PDF

PTS7_Manual.PDF User Manual Soliton Technologies CO., LTD www.soliton.com.tw - PCI V2.2. - PCI 32-bit / 33MHz * 2 - Zero Skew CLK Signal Generator. - (each Slot). -. - PCI. - Hot-Swap - DOS, Windows 98/2000/XP, Linux

More information

数据结构与算法 - Python基础

数据结构与算法 - Python基础 Python 教材及课件 课件及作业见网址 xpzhang.me 1 1. Python 2. 3. (list) (tuple) 4. (dict) (set) 5. 6. 7. 2 Python Python 3 Python 4 Python 1, 100, -8080, 0,... 0x 0-9, a-f 0 xff00, 0 xa432bf 5 1.24, 3.14, -9.80,...

More information

PIC16F F MPLAB 08 16F LED 15 LED

PIC16F F MPLAB 08 16F LED 15 LED PIC16F877 PIC16F877 03 16F877 05 06 MPLAB 08 16F877 13 LED 15 LED 17 20 24 2 PIC16F877 PIC16F877 DIP VDD VSS CLOCK CPU :,AND,OR,XOR ROM: CPU ROM RAM: CPU,CPU I/O:CPU, CPU,, 16F877 RAM 512 128 Bank Bank

More information

软件测试(TA07)第一学期考试

软件测试(TA07)第一学期考试 一 判 断 题 ( 每 题 1 分, 正 确 的, 错 误 的,20 道 ) 1. 软 件 测 试 按 照 测 试 过 程 分 类 为 黑 盒 白 盒 测 试 ( ) 2. 在 设 计 测 试 用 例 时, 应 包 括 合 理 的 输 入 条 件 和 不 合 理 的 输 入 条 件 ( ) 3. 集 成 测 试 计 划 在 需 求 分 析 阶 段 末 提 交 ( ) 4. 单 元 测 试 属 于 动

More information

穨文件1

穨文件1 2-1 Access 2000 Visual Basic Access 2000 97 Office Visual Basic Visual Basic Visual Basic VBA Visual Basic Visual Basic 2-1-1 Visual Basic Access Visual Basic ( ) 2-1 2-1 Visual Basic 2-1 Microsoft Access

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Hadoop 生 态 技 术 在 阿 里 全 网 商 品 搜 索 实 战 阿 里 巴 巴 - 王 峰 自 我 介 绍 真 名 : 王 峰 淘 宝 花 名 : 莫 问 微 博 : 淘 莫 问 2006 年 硕 士 毕 业 后 加 入 阿 里 巴 巴 集 团 淘 及 搜 索 事 业 部 ( 高 级 技 术 与 家 ) 目 前 负 责 搜 索 离 线 系 统 团 队 技 术 方 向 : 分 布 式 计 算

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt MACHINE LANGUAGE CODING AND THE DEBUG SOFTWARE DEVELOPMENT PROGRAM OF THE PC General instruction format for machine code 611 37100 微處理機原理與應用 Lecture 04-4 MACHINE LANGUAGE CODING AND THE DEBUG SOFTWARE

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information