当前位置:网站首页>逻辑运算指令

逻辑运算指令

2022-07-06 09:29:00 My71

原文链接 —— 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 
    
原网站

版权声明
本文为[My71]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Mr_peng13/article/details/125049473