1、嵌入式系统设计师-19 及答案解析(总分:1.00,做题时间:90 分钟)一、试题一(总题数:0,分数:0.00)二、试题二(总题数:1,分数:1.00)1.说明 设有数组 X 和 Y。X 数组中有 X1,X2、X10 十个数,Y 中有 Y1、Y2、 Y10 十个数。编制程序计算:Z1=X1+Y1 Z2=X2+Y2 Z3=X3-Y3 Z4=X4-Y4 Z5=X5-Y5 Z6=X6+Y6 Z7=X7-Y7 Z8=X8-Y8 Z9=X9+Y9 Z10=X10+Y10 设置一个 10 位的标志尺:LOGIC_RULE,若它的每一位决定了当前按顺序该做加法(该位为 0)或减法(该位为 1)操作,则由上
2、列等式可知 LOGIC RULE 中的低 10 位应是 _ 。 汇编程序代码 datarea segment ;define data segment x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y8,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10 logic_ruledw _ ;LOGIC_RULE initialize datarea ends program segment ;define code segment main proc far assume cs:prog
3、ram, ds:datarea start: ;starting execution address _ ;save old data segment sub ax, ax ;put zero in AX push ax ;save it on stack ;set DS register to current data segment mov ax,datarea mov ds,ax ;MAIN PART OF PROGRAM GOES HERE mov bx,0 mov ex,10 mov dx,logic_rule next: mov ax,xbx shr dx,1 jc subtrac
4、t _ jmp short result subtract: sub ax, y bx result: _ ;result=Zn add bx,2 loop next ret ;return to DOS main endp ;end of main part of program program ends ;end of code segment end start ;end of assembly 附:指令及寄存器说明。 MOV 传送字或字节 PUSH 把字压入堆栈 SHR 逻辑右移 JC 有进位时转移 JMP 无条件转移指令 SUB 减法 ADD 加法 LOOP CX 不为零时循环 JN
5、E/JNZ 不等于时转移 CMP 比较 段寄存器 2 个: CS: 代码段寄存器 DS: 数据段寄存器 数据寄存器 4 个: AX: 累加器 BX: 基址寄存器 CX: 计数寄存器 DX: 数据寄存器 (分数:1.00)_嵌入式系统设计师-19 答案解析(总分:1.00,做题时间:90 分钟)一、试题一(总题数:0,分数:0.00)二、试题二(总题数:1,分数:1.00)1.说明 设有数组 X 和 Y。X 数组中有 X1,X2、X10 十个数,Y 中有 Y1、Y2、 Y10 十个数。编制程序计算:Z1=X1+Y1 Z2=X2+Y2 Z3=X3-Y3 Z4=X4-Y4 Z5=X5-Y5 Z6=X
6、6+Y6 Z7=X7-Y7 Z8=X8-Y8 Z9=X9+Y9 Z10=X10+Y10 设置一个 10 位的标志尺:LOGIC_RULE,若它的每一位决定了当前按顺序该做加法(该位为 0)或减法(该位为 1)操作,则由上列等式可知 LOGIC RULE 中的低 10 位应是 _ 。 汇编程序代码 datarea segment ;define data segment x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y8,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10 logic_
7、ruledw _ ;LOGIC_RULE initialize datarea ends program segment ;define code segment main proc far assume cs:program, ds:datarea start: ;starting execution address _ ;save old data segment sub ax, ax ;put zero in AX push ax ;save it on stack ;set DS register to current data segment mov ax,datarea mov d
8、s,ax ;MAIN PART OF PROGRAM GOES HERE mov bx,0 mov ex,10 mov dx,logic_rule next: mov ax,xbx shr dx,1 jc subtract _ jmp short result subtract: sub ax, y bx result: _ ;result=Zn add bx,2 loop next ret ;return to DOS main endp ;end of main part of program program ends ;end of code segment end start ;end
9、 of assembly 附:指令及寄存器说明。 MOV 传送字或字节 PUSH 把字压入堆栈 SHR 逻辑右移 JC 有进位时转移 JMP 无条件转移指令 SUB 减法 ADD 加法 LOOP CX 不为零时循环 JNE/JNZ 不等于时转移 CMP 比较 段寄存器 2 个: CS: 代码段寄存器 DS: 数据段寄存器 数据寄存器 4 个: AX: 累加器 BX: 基址寄存器 CX: 计数寄存器 DX: 数据寄存器 (分数:1.00)_正确答案:()解析:(1)00 1101 1100 (2)00dch, 或 00DCH,或 220,或等价的二进制形式 (3)push ds (4)add ax,ybx (5)mov zbx,ax 试题二分析 (1)Z1 的+运算对应于第 0 位值为 0,Z2 的+运算对应于第 1 位值位 0,直到 Z10 的运算对应于第 9 位,因此低 10 位为 0011011100。 (2)LOGIC_RULE 初始化为(1)计算的值,十六进制为 00dch。 (3)把数据段压入堆栈,保存旧的数据段。 (4)dx 是保存的 LOGIC RULE 值,逻辑右移一位是 1 则跳转到 subtract 执行减操作,否则顺序执行加操作。(5)将执行的结果移入 Z。