1,前言
学习王爽老师的汇编语言一书所做的笔记
2,and指令
and指令:逻辑与指令,按位进行与运算
mov al,01100011B
and al,00111011B
# 执行结果:al=00100011B
al | 00111011B | & | 00100011 |
---|---|---|---|
0 | 0 | & | 0 |
1 | 0 | & | 0 |
1 | 1 | & | 1 |
0 | 1 | & | 0 |
0 | 1 | & | 0 |
0 | 0 | & | 0 |
1 | 1 | & | 1 |
1 | 1 | & | 1 |
通过该指令可将操作对象的相应为设为0,其他位不变
例如将al的第6位设为0的指令是:mov al,1011111B
3,or指令
or指令:逻辑或指令,按位进行或运算
mov al,01100011B
or al,00111011B
# 执行结果:al=01111011B
al | 00111011B | | | 01111011B |
---|---|---|---|
0 | 0 | | | 0 |
1 | 0 | | | 1 |
1 | 1 | | | 1 |
0 | 1 | | | 1 |
0 | 1 | | | 1 |
0 | 0 | | | 0 |
1 | 1 | | | 1 |
1 | 1 | | | 1 |
通过该指令可将操作对象的相应位设为1,其他位不变
将al的第6位设为1:or al,01000000B
4,大小写转换问题
4.1,关于ASCII码
在文本编辑过程中,当我们按下a
键,这个字符的信息会被送入计算机中,计算机用ASCII码的规则对其进行编码 ,将其转换为61H存储在内存的制定空间中;文本编辑软件将其从内存中取出61H,将其送到显卡上的显存。
4.2,大小写规律
大写 | 十六进制 | 二进制 | 小写 | 十六进制 | 二进制 |
---|---|---|---|---|---|
A | 41H | 01000001 | a | 61H | 01100001 |
B | 42H | 01000010 | b | 62H | 01100010 |
C | 43H | 01000011 | c | 63H | 01100011 |
D | 44H | 01000100 | d | 64H | 01100100 |
E | 45H | 01000101 | e | 65H | 01100101 |
F | 46H | 01000110 | f | 66H | 01100110 |
…… | …… | …… | …… | …… | …… |
小写字母与大写字母的十六进制只相差20H,也就是说区别在于第5位
依靠这个规律,我们可以编写这样一个程序,进行字母大小写转换
# 其实可以通过逐个判断字母是不是小写/大写,进行相应的大小写转换
# 这个程序是将第一个字符串转为大写
# 将第二个字符串转为小写
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s: mov al,[bx]
and al,11011111B
mov [bx],al
inc bx
loop s
mov bx,5
mov cx,11
s0: mov al,[bx]
or al,00100000B
mov [bx],al
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start