更多的寻址方式
[bx+idata]这种方式为数组的实现提供了机制,也可以通过此来优化连续的存储空间的操作
[bx+si]两种寄存器的值相加进行寻址
[bx+si+idata]//寄存器相加并且加上常数
adt : 能在【】下进行寻址的寄存器只有:bx,si,di,bp(详情下看)
2,要注意不能在一句话中同时使用两个【】寻址,因为无法知道取值数据大小。
3,延续以上,若是出现了无寄存器的情况,如直接向内存地址上写IDATA,就要手动添加数据长度描述符:
mov word ptr ds:[0],0 //注意源码中不能直接用[idata]进行寻值
mov byte ptr ds:[0],1
4,PUSH,POP 默认是对字操作,无法指定。
SI和DI
和一般的储值寄存器作用一致,16位,但是不能分为两个8位用。
循环嵌套:
通过栈的运用,将上层cx压栈,在内层循环完成时,再取栈,可以继续外循环。
一些标号:
reg:用来表示寄存器
ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di.
sreg:用来表示段寄存器
ds,ss,cs,es
bx,si,di,bp
只有这四个寄存器可以用在【】中进行寻址,其中bx可以分为bl,bh两个寄存器单独使用,si和di只能用于接收16位数据,不能分为上下8位,bp寄存器使用【】寻址时,默认以ss段地址为始地址寻址。
adt: 在源代码【】中不能同时出现bx和bp,前者以ds为段地址,后者以ss为段地址,显式指明段地址也不行。

形如结构体的寻址更改
汇编中[bx+si+idata]的另一种方式 [bx].idata[si] 形如C中结构体型的修改 struct.data[x],其中bx指定了结构体的地址,idata指明变量的开始地址,si指明变量内部的偏移地址。
DIV指令
DIV除法指令:
被除数:默认是在AX(当除数为8位时,被除数为AX 共16位),或DX和AX中(当除数为16位时,被除数为DX=高16位,AX=低16位 共32位。)
除数:有8位和16位两种,在一个reg或内存单元中。
结果:如果除数为8位,则AL存储商,AH存储余数。如果除数为16位,AX存储商,DX存储余数。
所以感觉除数位数主导着其它使用规则。
references: 《汇编语言》王爽
网友评论