逻辑运算指令

原文链接 —— SevenOne’Blog

循环移位

  1. 移位是针对寄存器中的二进制数进行移位。
  2. 在 debug 模式中寄存器里的值均已 16 进制显示。
  3. 当只移一位的时候,可以将数字 1 放到移动指令的源操作数上。若移动位数大于 1,需要将移动的位数存到 cl 寄存器中。

左移 ROL

  1. 将权值最高位移动到全职最低位。

  2. 例:0110 左移后得到的结果是 1100

  3. 代码实现

    • 需求:对 12h 进行向左移一位
    • 运行结果:24h。
    • 原理:12h = 00010010b,向左移位后得 00100100 即 24h
    code segment
        assume cs:code
        main:
            mov bx,12h
            rol bx,1
            
        edit:
            mov ah,4ch
            int 21h
    code ends
        end main
    

右移 ROR

  1. 将权值最低位移动到全职最高位。
  2. 例:0110 右移后得到的结果是 0011

逻辑运算

知识点

  1. 同高级语言的逻辑运算,遵循与或原则。
  2. 与运算:全真为真,一假为假。
  3. 或运算:一真为真,全假为假。
  4. 按位运算指的是按二进制位进行运算。
  5. 在二进制中,1 表示真,0 表示假。

指令

  1. 按位与运算:AND
  2. 按位或运算:OR
  3. 按位非运算:NOT
  4. 按位异或运算:XOR

例题

  1. 计算 24h 和 36h 的与运算

    code segment
        assume cs:code
        main:
            mov bx,24h
            and bx,36h
    
        edit:
            mov ah,4ch
            int 21h
    code ends
        end main
    
  2. 计算 24h 和 36h 的或运算

    code segment
        assume cs:code
        main:
            mov bx,24h
            or bx,36h
    
        edit:
            mov ah,4ch
            int 21h
    code ends
        end main
    
  3. 保留二进制的末尾数,其他高位清零。

    code segment
        assume cs:code
        main:
            mov bx,0ffffh
            and bx,01h
    
        edit:
            mov ah,4ch
            int 21h
    code ends
        end main
    

综合应用

  1. 保留位和 1 做与运算。

  2. 清零位和 0 做与运算。

输出二进制

  1. 需求:将寄存器中的值以二进制形式输出到终端。

  2. 代码

    code segment
        assume cs:code
        main:
            mov bl,12h
            mov cx,8h
            lopi:
                rol bl,1
                mov dl,bl
                and dl,01h
                add dl,30h
                call d02
            loop lopi
    
            mov dl,42h
            call d02
    
        edit:
            mov ah,4ch
            int 21h
            
        d02 proc near
            mov ah,02h
            int 21h
            ret
        d02 endp
    code ends
        end main 
    

输出十六进制

  1. 需求:将寄存器中的值以十六进制形式输出到终端。

  2. 代码

    code segment
        assume cs:code
        main:
            mov bl,0a2h
            mov cx,2
            lopi:
                push cx
                mov cl,4
                rol bl,cl
                pop cx
    
                mov dl,bl
                and dl,0fh
                cmp dl,09h
                jg letter
                jng number
    
                letter:
                    add dl,37h
                    call d02
                    jmp endcmp
    
                number:
                    add dl,30h
                    call d02
    
                endcmp:
            loop lopi
    
            mov dl,48h
            call d02
    
        edit:
            mov ah,4ch
            int 21h
        d02 proc near
            mov ah,02h
            int 21h
            ret
        d02 endp
    code ends
        end main 
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iGma_e

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值