阅读以下说明和X86汇编语言代码,将入(n)处的字句写在答题纸的对应栏内。 [说明] 设有数组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)操作,则由上列等式可知LOGIC RULE中的低10位应是(1)。 [汇编程序代码] 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 (2) ;LOGIC_RULE initialize datarea ends program segment ;define code segment main proc far assume cs:program, ds:datarea start: ;starting execution address (3) ;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,x[bx] shr dx,1 jc subtract (4) jmp short result subtract: sub ax, y [bx] result: (5) ;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 不等于时转移 CMP 比较 段寄存器2个: CS: 代码段寄存器 DS: 数据段寄存器 数据寄存器4个: AX: 累加器 BX: 基址寄存器 CX: 计数寄存器 DX: 数据寄存器 (1)00 1101 1100 (2)00dch, 或00DCH,或220,或等价的二进制形式 (3)push ds (4)add ax,y[bx] (5)mov z[bx],ax