基础-6

2017-01-20  本文已影响0人  秣崖

更多的寻址方式

[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: 《汇编语言》王爽

上一篇 下一篇

猜你喜欢

热点阅读