汇编语言add详解

一,基本语法

;基本格式
add 寄存器,二进制数
or 寄存器,二进制数
;add与or通常用于改变寄存器中的值
;add按位与运算
;or按位或运算

 二,实例

add按位与

mov al,01100011b
and al,00100011b

执行结果:(al)=00100011b

解释,只有对应位全是1的时候运算结果是1

or按位或

mov al,01100011b
or al, 00100011b

执行结果:(al)=01100011b

解释,对应位有一个是1,运算结果就是1

三,debug中的and与or指令

问题:前面我们说过可以通过and改变al里面的值,现在如果我想改变数据段中的一个数据,并且不想借助寄存器来实现,可行吗?

答案是可以的,也就是and不仅可以改变寄存器中的值,还可以直接改变某一地址存储的数据,但是这个过程需要添加一个指定操作长度的指令

比如下面一段,想要将dataa中第一个数据变为零

string segment
    db 1,2,3
string ends

code segment
start:  mov ax,string
        mov ds,ax
        mov bx,0
        and  byte ptr ds:[0],00000000b

        mov ax,4c00h
        int 21h

code ends
end start

运行结果:

你会发现在使用and时我们添加了byte ptr,它的作用是指定操作的大小是字节,在使用它后debug中and这一段指令的机器码是  

可以看到这是对字节操作

如果不使用byte ptr来指定大小,and ds:[0],00000000b在debug中形式是

会使操作出现问题

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值