8086系列(8):逻辑尺

题目

设有数组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,做减法的情况

在这里插入图片描述
最后查看内存变化

在这里插入图片描述

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值