汇编语言(第三版,王爽)读书笔记
更灵活的定位内存地址的方法
and和or指令
and指令:逻辑与,按位进行与运算 and al,00111011B
or指令:逻辑或,按位进行或运算 or al, 00100000B
以字符形式给出的数据
用'......'
的方式指明数据是以字符的形式给出的,编译器将他们转化位ASCII码
例如db 'unIX
’相当于db 75h,6eh,49h,58h
大小写转化问题
小写字母的ASCII码减去20h就可以得到大写字母
大写字母的ASCII码加上20h就可以得到小写字母
就ASCII码的二进制形式来看,除第5位(位数从0开始)外,大写和小写字母的其它各位都一样,大写字母第5位为0,小写字母第5位为1
and al,11011111B
将第5位变为0,变为大写字母
or al,00100000B
将第5位变为1,变为小写字母
[bx+idata]
[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)
例如mov ax, [bx+200]
表示 (ax)=((ds)*16+(bx)+200)
也可以写成:mov ax,[200+bx]
,mov ax,200[bx]
, mov ax,[bx].200
用[bx+idata]的方法进行数组处理
对于如下数据
datasg segment
db 'Basic'
db 'MinIx'
datasg ends
datasg中的2个字符串,一个起始地址为0,另一个为5;可以将它们看成2个数组,使用[bx+0] ,[bx+5]
的方式来访问或者写成0[bx],5[bx]
SI和DI
si和di是8086cpu中和bx功能相近的寄存器,但不能分成两个8位寄存器来使用
[bx+si]和[bx+di]
它们2个含义相似,[bx+si]表示一个内存单元,偏移地址为(bx)+(si)
[bx+si+idata]和[bx+di+idata]
它们同样含义相似,[bx+si+idata]表示一个内存单元的偏移地址为(bx)+(si)+idata