题目
设有数组X和Y。X数组中有X1,…,X10;Y数组中有Y1,…,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,结果存入Z数组。
思路
对于这种问题可以使用循环结构来完成,由于每次循环的操作位不同,我们可以事先设立标志位存放于逻辑尺中,进入循环后取出每一个位就可以判断做哪种操作了。
代码
datasg segment
x dw 0,1,2,3,4,5,6,7,8,9
y dw 0,1,2,3,4,5,6,7,8,9
z dw 10 dup(?)
logic_rule dw 00dcH ;0000000011011100 0代表+ 1代表-
datasg ends
;------------------
codesg segment
assume cs:codesg,ds:datasg,es:datasg
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
mov es,ax
;-----------------------
mov bx,0
mov cx,10
mov dx,logic_rule
next:
mov ax,x[bx]
shr dx,1
jc subtract ;cf=1,则做减法
add ax,y[bx]
jmp short result
subtract:
sub ax,y[bx]
result:
mov z[bx],ax
add bx,2
loop next
;------------------------
exit:
ret
main endp
codesg ends
end start
调试
反汇编、查看数据段内存
观察标志位为0,做加法的情况
观察标志位为1,做减法的情况
最后查看内存变化