介绍两条指令and和or,因为我们下面的例程中要用到它们
(1) and指令:逻辑与指令,按位进行与运算
and 指令
按位与
作用:只将某一位变成0,而其他位保持不变
使用:谁要变0,谁就和0与
and就是与运算,两个数按二进制位相与,全1为1,有0为0,常用于把低位清零
mov al,01100011B and a1,OO111011B 执行后:a1=00100011 B
通过该指令可将操作对象的相应位设为0,其他位不变
将al的第6位设为0的指令是: and al, 10111111 B 将al的第7位设为。的指令是: and a1, 01111111 B 将al的第0位设为0的指令是: and al, 11111110B
(2) o:指令:逻辑或指令,按位进行或运算
or 指令
按位或
作用:只将某一位变成1,而其他位保持不变
使用:谁要变1,谁就和1或
mov al,01100011B or al,00111011B 执行后:al=01111011B
通过该指令可将操作对象的相应位设为1,其他位不变
将al的第6位设为1的指令是:or al,01000000B 将al的第7位设为1的指令是:or a1,10000000B 将al的第0位设为1的指令是:or a1,00000001B
and和or指令汇编举例
assume cs:code
code segment
; 逻辑运算 按照二进制位运算
start: mov ax,0
mov al, 00001111B
and al, 11110000B
; 00000000B
mov ax,0
mov al, 00001111B
or al, 11110000B
; 11111111B
mov ax,4c00H
int 21H
code ends
通过and,or逻辑运算指令实现大写转小写,小写转大写
assume cs:code, ds:data
data segment
db 'puThon'
db 'JAVA'
data ends
; z 122 7A 0111 1010 小写z
;1101 1111
; Z 90 5A 0101 1010 大写Z
; 0010 0000
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov cx,6
; 小写转大写
upLet: mov al,ds:[bx]
and al,11011111B
mov ds:[bx], al
inc bx
loop upLet
mov cx,4
; 大写转小写
upX: mov al,ds:[bx]
or al,00100000B
mov ds:[bx],al
inc bx
loop upX
mov ax,4C00H
int 21h
code ends
end start
复制字符串
assume cs:code, ds:data
data segment
db 'welcome to asm'
db '--------------'
data ends
code segment
start: mov ax, data
mov ds, ax
mov cx, 7
mov si,0
mov di,16
cp: mov ax, ds:[si]
mov ds:[di], ax
add si,2
add di,2
loop cp
mov ax,4C00H
int 21H
code ends
end start
