1、嵌入式系统设计师-55 及答案解析(总分: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:program,
3、 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 subtract _
4、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不为零时循环 JNE/JNZ
5、 不等于时转移 CMP 比较 段寄存器 2个: CS: 代码段寄存器 DS: 数据段寄存器 数据寄存器 4个: AX: 累加器 BX: 基址寄存器 CX: 计数寄存器 DX: 数据寄存器 (分数:1.00)_嵌入式系统设计师-55 答案解析(总分: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=
6、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_ruledw _ ;L
7、OGIC_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 ds,ax ;MAIN
8、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 of assembl
9、y 附:指令及寄存器说明。 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。