网友您好, 请在下方输入框内输入要搜索的题目:
阅读以下说明和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
参考答案