and 和 or指令
and指令:逻辑与指令,按位进行与运算。(全1出1)
mov al, 01100011B
and al, 00111011B
结果:al = 00111011B
通过该指令可将操作对象的相应位设为0,其他位不变。
or指令:逻辑或指令,按位进行或运算。(有1出1)
mov al, 01100011B
or al, 00111011B
结果:al = 01111011B
通过该指令可将操作对象的相应位设为1,其他位不变。
以字符形式给出的数据
在汇编程序中,用‘…..’的方式指明数据是以字符的形式给出的,编辑器将把它们转化为相对应的ASCII码。
例:
assume cs:code, ds:data
data segment
db 'unIX' //unIX 换转化为ASCII码
db 'foRK'
data ends
code segment
start: mov al, 'a'
mov bl, 'b'
mov ax, 4c00H
int 21H
code ends
end start
db ‘unIX’ 相当于 db 75H, 6EH, 49H, 58H即unIX的ASCII码。
mov al, ‘a’ 相当于 mov al, 61H即a的ASCII码。
大小写转换的问题(or和and判断,不用判断语句)
通过对比ASCII码可以看出,小写字母的ASCII码值比大写字母的ASCII码值大20H。 即将“a”的ASCII码值减去20H,就可以得到“A”。
一个字母,不管它原来是大写还是小写,将它的第5位为0,它就必将变为大写字母,将它的第5位为1,它就必将变为小写字母。
大小写转换:
assume cs:code, ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
code segment
start: mov ax, datasg
mov ds, ax
mov bx, 0
mov cx, 5
//大写
s: mov al, [bx] //写出
and al, 11011111H //转换
mov [bx], al //存会
inc bx
loop s
//小写
mov cx, 11
s0: mov al, [bx]
or al, 00100000H
mov [bx], al
inc bx
loop s0
mov ax, 4c00H
int 21H
code ends
end start