第七章
1.db 'unIX'相当于db 75H,6EH,49H,58H(可以用单引号括住)
2.mov ax,[bx+200]把段地址为DS,偏移地址为(bx+200)的内存单元的内容(2bytes)赋值给ax
也可以写成movax,200[bx] 或 mov ax,[bx].200
3.不能直接对data段中的元素进行算术运算
如and [bx],20h是非法的,应先mov al,[bx]
and al,0x20h
mov [bx],al
4.SI和DI是与BX功能相近(用来作下标)的寄存器,但其不可分成两个8位寄存器使用
5.更常用[bx+si]和[bx+di]来表示一个内存单元,也可写成 mov ax,[bx][si]
第八章
1.只有bx,bp,si,di这四个寄存器可以(单独或组合)出现在[...]中(但是除了[bx+bp],[si+di]
2.只要在[]中使用了寄存器bp,且指令中没有显式给出段地址,则此时段地址默认取ss
3.对于机器指令这一层,并不关心数据的值是多少,只关心指令执行前一刻将要处理的数据所在的位置
指令执行前所要处理的数据可以在三个地方:CPU内部,内存,端口. 例如:
mov bx,[0] 内存的ds:[0]单元
mov bx,ax CPU内部的ax寄存器
mov bx,1 CPU内部的指令缓冲器
4.寻址方式的种类:
[idata], 直接寻址, EA=idata(汇编中称为立即数), SA=ds
[bx],[si],[di],[bp]寄存器间接寻址 SA=DS(除了[bp])
[bx+idata]寄存器相对寻址
[bx+si]基址变址寻址
[bx+si+idata]相对基址变址寻址
5.确定数据处理长度的方法
1)通过寄存器名指明
2)在地址前用操作符word ptr或byte ptr或dword ptr指明(类似于强制类型转换)
3)由操作指令确定,如push,pop指令只进行字操作(因此pop al是不合法的)
6.一般可以用[bx+idata+si]的方式来访问结构体中的数据, 用bx定位整个结构体,用idata定位结构体中的某一个数据项,用si定位该数据项中的某一个字符/元素,可以写成类似于C语言的形式 bx.10h[si]
7.div指令的被除数位数决定除数位数,得数的商存放在低位(如al或ax),余数存放在高位(如ah或dx)
8.dd用来定义dword(32位,4byte)的数据(伪指令)
9.dup也是一个伪指令操作符,用来进行数据的重复,比如:db 3 dup (0)
若db 3 dup(0,1,2) 则相当于定义了九个字节 0,1,2,0,1,2,0,1,2
db 3 dup ('abc','ABC')定义了十八个字节'abcABCabcABC...'