介绍两条指令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