1.
and指令:逻辑与指令,按位进行与运算
例如指令:mov al,01100011B
and al,00100011B
执行后输出的结果是:al=00100011B
原因是and指令可以将指定位设为0,其他位不变
将and al,巴拉巴拉(何处为1,al中何处设为0,但是要注意,从右到左是以0开始的)
or指令:逻辑或指令,按位进行与运算
例如指令:mov al.01100011B
or al,00111011B
执行后输出的结果是:al=01111011B
原因是or指令可以将指定为设为1,其他位不变
同and理
2.
其实没啥好说的,ASCII码就是将所有的符号编出顺序,方便使用
计算机运行原理:使用计算机进行键盘敲击,在敲出的同时,计算机将键位信息输入CPU中,进行提取相应键位内的数据
,然后将提出的数据进行输出到计算机显示屏上。
3.以字符形式给出的数据
例如:
assume cs:code,ds:data
code segment
db 'unIX'
db 'foRX'
code ends
data segment
.........
data ends
end
以上代码中的两个代码在debug上运行并将字符数据输入到ax中之后,进行d命令查看的话,会看到相对的地址上存储的
是对应该字符的ASCII码。
这就是计算机存储数据的原理。
4.大小写转化的问题
首先大小写的实质区别就是ASCII码不一样,但是如果用现学的知识的话,命令不支持判断大小写,但是如果仔细
判断的话,就会发现大小写的ASCII码相差32,刚好是ASCII码用二进制表示的从右到左数的第五位(起始为第0位)
,所以不
经判断,直接使用上面的and和or命令对字符进行转换。
//直接上代码 ps:此处代码不可以直接粘贴使用,因为并没有将对应代码的空格对整齐
assume ds:a,cs:b
a segment
db 'QWsds'
db 'SdiisdiiDWO'
a ends
b segment
start:
mov ax,a
mov ds,ax
mov bx,0
mov cx,5
s: mov al,[bx]
and al,110111111B
mov [bx],al
inc bx
loop s
mov bx,5
mov cx,10
s0: mov al,[bx]
or [bx],00100000B
mov [bx],al
inc bx
loop s0
mov ax,4c00h
int21h
b ends
end start
这是运行一点,将数据输入的内容。
这是全部运行后的,其中共16个字符,我自=只运行了15个循环,所以最后一位不变,保持了大写
5.[bx+idata][bx+idata]是一个更加灵活的内存单元,
例如 mov ax,[bx+idata]
相当于
mov bx,idata
mov ax,bx
还可以写成其他格式 mov ax,[idata+bx] mov ax,idata[bx] mov ax,[bx].idata
主要作用就是更简单的写代码,例如
start:
mov ax,a
mov ds,ax
mov bx,0
mov cx,5
s: mov al,[bx]
and al,110111111B
mov [bx],al
inc bx
loop s
mov bx,5
mov cx,10
s0: mov al,[bx]
or [bx],00100000B
mov [bx],al
inc bx
loop s0
没错,就是照抄上面的代码,但是如果使用[bx+idata]呢?
start:
mov ax,b
mov ds,ax
mov bx,0
mov cx,5
s: mov al,[bx]//此刻表示对[bx]位置的字符进行操作
and al,11011111B
mov [bx],al
mov al,[bx+5]//此刻表示对[bx+5]位置的字符进行操作
or al,00100000B
mov [bx+5],al
mov al,[bx+10]//此刻表示对[bx+10]的字符进行操作,因为我们需要操作十五个字符,其中五个小写,所以大写分两次操作
or al,00100000B
mov [bx+5],al
inc [bx]
loop s
//由此可见,[bx+idata]确实方便很多,但是也有不方便的一点,就是如果两样数据数量表示没有规律 的话,也不方便7.SI和DI是CPU中与bx功能相近的寄存器,但是SI和DI不能够分成两个八位的寄存器来使用,但是却可以用[si+idata]
来准确的指向需要定位的存储单元
例如 mov ax,[bx] mov ax,[si] 是一样的
但是!如果仅仅是此作用的话,这个笔记将毫无意义,所以重点来啦,SI和Di关系着寄存器的寻址方式
正如图所示,如果'db'了四行字符例如
db 'abc'
db 'qwe'
db 'asd'
db 'zxc'
那么在数据的存储结构就如图
0123456789 A B C D E F
R=00| a | b | c ||||||||||||||10| q | w | e ||||||||||||||20| a | s | d ||||||||||||||30| z | x | c ||||||||||||||
此刻SI和DI的作用就出来了,用[bx]表示第一行的开始的位置,而si和di在循环套循环中作为代数存储数据。